From: Myoungwon Oh Date: Thu, 16 Nov 2023 12:10:55 +0000 (+0900) Subject: crimson/os/seastore: replay inplace-rewritten extents correctly at mount time X-Git-Tag: v19.3.0~272^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9d86be6af2e29ad8815c59ee4b86b5fc832f8200;p=ceph.git crimson/os/seastore: replay inplace-rewritten extents correctly at mount time Signed-off-by: Myoungwon Oh --- diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index f0c7a0a34f2..8645a307106 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -1824,11 +1824,23 @@ Cache::replay_delta( DEBUG("replay extent delta at {} {} ... -- {}, prv_extent={}", journal_seq, record_base, delta, *extent); - assert(extent->last_committed_crc == delta.prev_crc); - assert(extent->version == delta.pversion); - extent->apply_delta_and_adjust_crc(record_base, delta.bl); - extent->set_modify_time(modify_time); - assert(extent->last_committed_crc == delta.final_crc); + if (delta.paddr.get_addr_type() == paddr_types_t::SEGMENT || + !can_inplace_rewrite(delta.type)) { + assert(extent->last_committed_crc == delta.prev_crc); + assert(extent->version == delta.pversion); + extent->apply_delta_and_adjust_crc(record_base, delta.bl); + extent->set_modify_time(modify_time); + assert(extent->last_committed_crc == delta.final_crc); + } else { + assert(delta.paddr.get_addr_type() == paddr_types_t::RANDOM_BLOCK); + extent->apply_delta_and_adjust_crc(record_base, delta.bl); + extent->set_modify_time(modify_time); + // Since rewrite_dirty can conflict with other transaction after + // inplace rewrite is complete, crc may not be matched + if (delta.final_crc == extent->last_committed_crc) { + assert(extent->version == delta.pversion); + } + } extent->version++; if (extent->version == 1) {