From: Adam Crume Date: Tue, 17 Jun 2014 20:24:45 +0000 (-0700) Subject: osd: Only normalize extent if op uses extent X-Git-Tag: v0.83~47^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=58212b1245373b6f015cbff11844d33a900bf3cb;p=ceph.git osd: Only normalize extent if op uses extent Code in ReplicatedPG was reading and modifying ceph_osd_op.extent, even though that is a member of a union and only valid for some ops. Signed-off-by: Adam Crume --- diff --git a/src/include/rados.h b/src/include/rados.h index 0c9791d9d565..1ce5c2519cfb 100644 --- a/src/include/rados.h +++ b/src/include/rados.h @@ -334,6 +334,25 @@ static inline int ceph_osd_op_mode_cache(int op) { return op & CEPH_OSD_OP_MODE_CACHE; } +static inline int ceph_osd_op_uses_extent(int op) +{ + switch(op) { + case CEPH_OSD_OP_READ: + case CEPH_OSD_OP_MAPEXT: + case CEPH_OSD_OP_MASKTRUNC: + case CEPH_OSD_OP_SPARSE_READ: + case CEPH_OSD_OP_SYNC_READ: + case CEPH_OSD_OP_WRITE: + case CEPH_OSD_OP_WRITEFULL: + case CEPH_OSD_OP_TRUNCATE: + case CEPH_OSD_OP_ZERO: + case CEPH_OSD_OP_APPEND: + case CEPH_OSD_OP_TRIMTRUNC: + return true; + default: + return false; + } +} /* * note that the following tmap stuff is also defined in the ceph librados.h diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 52e62986f3cd..bad48726029f 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -2973,7 +2973,9 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) } // munge -1 truncate to 0 truncate - if (op.extent.truncate_seq == 1 && op.extent.truncate_size == (-1ULL)) { + if (ceph_osd_op_uses_extent(op.op) && + op.extent.truncate_seq == 1 && + op.extent.truncate_size == (-1ULL)) { op.extent.truncate_size = 0; op.extent.truncate_seq = 0; }