From: Jianpeng Ma Date: Sun, 22 Mar 2015 14:07:24 +0000 (+0800) Subject: osd/Replicated: For CEPH_OSD_OP_WRITE, set data digest. X-Git-Tag: v0.94.8~42^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F8845%2Fhead;p=ceph.git osd/Replicated: For CEPH_OSD_OP_WRITE, set data digest. 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 (cherry picked from commit c7702bf85d3617b3e1c6619b8ebeff34932fc3e4) --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index ec7fc5ef045f..78e8ad9645c5 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -4221,8 +4221,10 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& 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(); }