]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/Replicated: For CEPH_OSD_OP_WRITE, set data digest. 8845/head
authorJianpeng Ma <jianpeng.ma@intel.com>
Sun, 22 Mar 2015 14:07:24 +0000 (22:07 +0800)
committerNathan Cutler <ncutler@suse.com>
Sat, 30 Apr 2016 15:59:12 +0000 (17:59 +0200)
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>
(cherry picked from commit c7702bf85d3617b3e1c6619b8ebeff34932fc3e4)

src/osd/ReplicatedPG.cc

index ec7fc5ef045f7b3063b9a365dd5d20661427754b..78e8ad9645c5360f6c9a43e6f38481da59f12349 100644 (file)
@@ -4221,8 +4221,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();
       }