From: Xuehan Xu Date: Mon, 2 Feb 2026 05:52:47 +0000 (+0800) Subject: crimson/os/seastore/cache: fix possible extent chksum error X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d2d7107b4e976850862435a7142ef52259d14c2a;p=ceph.git crimson/os/seastore/cache: fix possible extent chksum error See: https://github.com/ceph/ceph/pull/66506#issuecomment-3821417465 Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index b5967d9f808..4db6d700602 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -1920,6 +1920,7 @@ private: auto old_length = extent->get_loaded_length(); load_ranges_t to_read = extent->load_ranges(offset, length); auto new_length = extent->get_loaded_length(); + bool extent_fully_loaded = extent->is_fully_loaded(); assert(new_length > old_length); pinboard->increase_cached_size(*extent, new_length - old_length, p_src); return seastar::do_with(to_read.ranges, [extent, this, FNAME](auto &read_ranges) { @@ -1935,12 +1936,13 @@ private: read_range.ptr); }); }).safe_then( - [this, FNAME, extent=std::move(extent), offset, length, pin_crc]() mutable { + [this, FNAME, extent=std::move(extent), offset, length, + pin_crc, extent_fully_loaded]() mutable { ceph_assert(extent->state == CachedExtent::extent_state_t::EXIST_CLEAN || extent->state == CachedExtent::extent_state_t::CLEAN || !extent->is_valid()); if (extent->is_valid()) { - if (extent->is_fully_loaded()) { + if (extent_fully_loaded) { // crc will be checked against LBA leaf entry for logical extents, // or check against in-extent crc for physical extents. if (epm.get_checksum_needed(extent->get_paddr())) {