From d2d7107b4e976850862435a7142ef52259d14c2a Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Mon, 2 Feb 2026 13:52:47 +0800 Subject: [PATCH] crimson/os/seastore/cache: fix possible extent chksum error See: https://github.com/ceph/ceph/pull/66506#issuecomment-3821417465 Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/cache.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index b5967d9f808b..4db6d7006025 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())) { -- 2.47.3