]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/transaction_manager:
authorXuehan Xu <xuxuehan@qianxin.com>
Sun, 11 May 2025 03:19:24 +0000 (11:19 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Fri, 30 May 2025 05:27:55 +0000 (13:27 +0800)
Cache::retire_absent_extent_addr should be called immediately after
TransactionManager::get_extent_if_linked if necessary

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

index 6fca3bd2966f96db235c71e7e1c5bf40b3e86fe2..8e3fe2e9f078568067c127e60f5d8c87acb8621a 100644 (file)
@@ -528,7 +528,7 @@ public:
         ceph_assert(!pin.is_clone());
        fut = fut.si_then([this, &t, &pin]() mutable {
          return lba_manager->refresh_lba_mapping(t, std::move(pin));
-       }).si_then([this, &t, &pin](auto newpin) {
+       }).si_then([this, &t, &pin, original_paddr, original_len](auto newpin) {
          pin = std::move(newpin);
          if (full_extent_integrity_check) {
            return read_pin<T>(t, pin.duplicate()
@@ -550,6 +550,7 @@ public:
              });
            } else {
              // absent
+             cache->retire_absent_extent_addr(t, original_paddr, original_len);
              return base_iertr::make_ready_future<TCachedExtentRef<T>>();
            }
          }
@@ -570,8 +571,6 @@ public:
          if (ext) {
            assert(ext->is_seen_by_users());
            cache->retire_extent(t, ext);
-         } else {
-           cache->retire_absent_extent_addr(t, original_paddr, original_len);
          }
          for (auto &remap : remaps) {
            auto remap_offset = remap.offset;