]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/transaction_manager: read_pin_by_type read the whole
authorXuehan Xu <xxhdx1985126@gmail.com>
Sat, 6 Sep 2025 12:03:41 +0000 (20:03 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Wed, 17 Sep 2025 08:57:00 +0000 (16:57 +0800)
extent if it's not fully loaded

Fixes: https://tracker.ceph.com/issues/72902
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
src/crimson/os/seastore/transaction_manager.h

index 4f3eac692110b187eaba1b8a9b8040541851db27..2ee2ee7dc66dec192e8db4b5e1e6a654e257593a 100644 (file)
@@ -1217,13 +1217,16 @@ private:
     // checking the lba child must be atomic with creating
     // and linking the absent child
     if (v.has_child()) {
-      return std::move(v.get_child_fut()
-      ).si_then([type](auto ext) {
-        ceph_assert(ext->get_type() == type);
-        return ext;
-      });
+      auto extent = co_await std::move(v.get_child_fut());
+      auto len = extent->get_length();
+      auto ext = co_await cache->read_extent_maybe_partial(
+       t, std::move(extent), 0, len);
+      ceph_assert(ext->get_type() == type);
+      co_return ext;
     } else {
-      return pin_to_extent_by_type(t, pin, v.get_child_pos(), type);
+      auto extent = co_await pin_to_extent_by_type(
+       t, pin, v.get_child_pos(), type);
+      co_return extent;
     }
   }