]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: clear data digest when write_trunc 41290/head
authorAran85 <z13121369189@gmail.com>
Wed, 12 May 2021 01:33:06 +0000 (09:33 +0800)
committerAran85 <z13121369189@gmail.com>
Wed, 12 May 2021 05:04:59 +0000 (13:04 +0800)
like CEPH_OSD_OP_TRUNCATE, the truncate within CEPH_OSD_OP_WRITE should
clear oi.data_digest too.

consider such circumstance:
[write 0~10]
[write 5~10 [1@5]]

the first write will generate data_digest, if the second write don't
clear digest, it will continue calc digest and make crc mismatch.

Fixes: https://tracker.ceph.com/issues/50763
Signed-off-by: Zengran Zhang <zhangzengran@sangfor.com.cn>
src/osd/PrimaryLogPG.cc

index e660cc49fa53d5baa7c5c900a0cee4cdcd529502..d64f26c66d429a0559dbbb834096f78f758537c3 100644 (file)
@@ -6668,6 +6668,7 @@ int PrimaryLogPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
                oi.size - op.extent.truncate_size);
              ctx->modified_ranges.union_of(trim);
              ctx->clean_regions.mark_data_region_dirty(op.extent.truncate_size, oi.size - op.extent.truncate_size);
+             oi.clear_data_digest();
            }
            if (op.extent.truncate_size != oi.size) {
               truncate_update_size_and_usage(ctx->delta_stats,