]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/ReplicatedPG: require write payload match length
authorSage Weil <sage@inktank.com>
Fri, 23 Aug 2013 22:11:49 +0000 (15:11 -0700)
committerSage Weil <sage@inktank.com>
Fri, 23 Aug 2013 22:12:18 +0000 (15:12 -0700)
Hopefully this won't break old clients; I can't think of any.  We *should*
be picky about our requests.

Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Samuel Just <sam.just@inktank.com>
src/osd/ReplicatedPG.cc

index a2a40058ac1e319880dd5e86c4a9f3b95e7d1df4..bca49024c0bb726b15f6786226fc6aa65bec7aa7 100644 (file)
@@ -2594,7 +2594,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
     case CEPH_OSD_OP_WRITE:
       ++ctx->num_write;
       { // write
-       if (op.extent.length > osd_op.indata.length()) {
+       if (op.extent.length != osd_op.indata.length()) {
          result = -EINVAL;
          break;
        }
@@ -2629,9 +2629,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
        result = check_offset_and_length(op.extent.offset, op.extent.length);
        if (result < 0)
          break;
-       bufferlist nbl;
-       bp.copy(op.extent.length, nbl);
-       t.write(coll, soid, op.extent.offset, op.extent.length, nbl);
+       t.write(coll, soid, op.extent.offset, op.extent.length, osd_op.indata);
        write_update_size_and_usage(ctx->delta_stats, oi, ssc->snapset, ctx->modified_ranges,
                                    op.extent.offset, op.extent.length, true);
        if (!obs.exists) {
@@ -2644,22 +2642,20 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
     case CEPH_OSD_OP_WRITEFULL:
       ++ctx->num_write;
       { // write full object
-       if (op.extent.length > osd_op.indata.length()) {
+       if (op.extent.length != osd_op.indata.length()) {
          result = -EINVAL;
          break;
        }
        result = check_offset_and_length(op.extent.offset, op.extent.length);
        if (result < 0)
          break;
-       bufferlist nbl;
-       bp.copy(op.extent.length, nbl);
        if (obs.exists) {
          t.truncate(coll, soid, 0);
        } else {
          ctx->delta_stats.num_objects++;
          obs.exists = true;
        }
-       t.write(coll, soid, op.extent.offset, op.extent.length, nbl);
+       t.write(coll, soid, op.extent.offset, op.extent.length, osd_op.indata);
        interval_set<uint64_t> ch;
        if (oi.size > 0)
          ch.insert(0, oi.size);