]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/Replicated: For CEPH_OSD_OP_WRITE, set data digest.
authorJianpeng Ma <jianpeng.ma@intel.com>
Sun, 22 Mar 2015 14:07:24 +0000 (22:07 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Sun, 22 Mar 2015 14:07:24 +0000 (22:07 +0800)
Add two cases which can add data digest for OP_WRITE:
a: offset = 0, and length > original size
b: offset = original size, and original has data_digest.

Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/osd/ReplicatedPG.cc

index 5d8d7588a459e72173db6452768406a28b1acba4..85e036f14e416b5bf77c87086405e2cf164d7cd7 100644 (file)
@@ -4385,8 +4385,10 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
        write_update_size_and_usage(ctx->delta_stats, oi, ctx->modified_ranges,
                                    op.extent.offset, op.extent.length, true);
        maybe_create_new_object(ctx);
-       if (op.extent.offset == 0 && op.extent.length == oi.size)
+       if (op.extent.offset == 0 && op.extent.length >= oi.size)
          obs.oi.set_data_digest(osd_op.indata.crc32c(-1));
+       else if (op.extent.offset == oi.size && obs.oi.is_data_digest())
+         obs.oi.set_data_digest(osd_op.indata.crc32c(obs.oi.data_digest));
        else
          obs.oi.clear_data_digest();
       }