]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix TRIMTRUNC truncation size
authorYehuda Sadeh <yehuda@hq.newdream.net>
Tue, 2 Mar 2010 18:07:39 +0000 (10:07 -0800)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Tue, 2 Mar 2010 18:55:27 +0000 (10:55 -0800)
src/osd/ReplicatedPG.cc

index 48faa96e8819e6bcc064f36f8ff82a53219bfa6f..3e076cc710342743732acf75c898ac9beda071c3 100644 (file)
@@ -1146,6 +1146,9 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops,
       break;
       
     case CEPH_OSD_OP_TRIMTRUNC:
+      op.extent.offset = op.extent.truncate_size;
+      // falling through
+
     case CEPH_OSD_OP_TRUNCATE:
       { // truncate
        if (!ctx->obs->exists) {
@@ -1154,15 +1157,16 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops,
        }
 
        if (op.extent.truncate_seq) {
+         assert(op.extent.offset == op.extent.truncate_size);
          if (op.extent.truncate_seq <= oi.truncate_seq) {
            dout(10) << " truncate seq " << op.extent.truncate_seq << " <= current " << oi.truncate_seq
                     << ", no-op" << dendl;
            break; // old
          }
-         oi.truncate_seq = op.extent.truncate_seq;
-         oi.truncate_size = op.extent.truncate_size;
          dout(10) << " truncate seq " << op.extent.truncate_seq << " > current " << oi.truncate_seq
                   << ", truncating" << dendl;
+         oi.truncate_seq = op.extent.truncate_seq;
+         oi.truncate_size = op.extent.truncate_size;
        }
 
        t.truncate(coll_t::build_pg_coll(info.pgid), soid, op.extent.offset);