]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: Only normalize extent if op uses extent
authorAdam Crume <adamcrume@gmail.com>
Tue, 17 Jun 2014 20:24:45 +0000 (13:24 -0700)
committerAdam Crume <adamcrume@gmail.com>
Mon, 23 Jun 2014 22:06:50 +0000 (15:06 -0700)
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 <adamcrume@gmail.com>
src/include/rados.h
src/osd/ReplicatedPG.cc

index 0c9791d9d565e5aba430ed10d899660fdd9d50a8..1ce5c2519cfbb0163e08197ffd45c2788af58ada 100644 (file)
@@ -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
index 52e62986f3cdf6793927036cdf5c2f114c778bb0..bad48726029fa8809ee26a490bf7985ecd5294b8 100644 (file)
@@ -2973,7 +2973,9 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& 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;
     }