]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/cache: fix possible extent chksum error 67157/head
authorXuehan Xu <xuxuehan@qianxin.com>
Mon, 2 Feb 2026 05:52:47 +0000 (13:52 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Mon, 2 Feb 2026 05:52:47 +0000 (13:52 +0800)
See: https://github.com/ceph/ceph/pull/66506#issuecomment-3821417465

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/os/seastore/cache.h

index b5967d9f808b7f83d20bf45c607af3e13ae05887..4db6d7006025cace1fe0535b9de2b63beecaea90 100644 (file)
@@ -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())) {