]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/transaction_manager: add get_extent_if_linked() interface
authorXuehan Xu <xuxuehan@qianxin.com>
Thu, 9 May 2024 11:59:19 +0000 (19:59 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Fri, 17 May 2024 02:41:22 +0000 (10:41 +0800)
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/os/seastore/transaction_manager.h

index 1f1ebeceb3d50e2068353fff7aba4f8f25c1eaf0..67e041758157e60607e0049730f98cca19e1c924 100644 (file)
@@ -175,6 +175,20 @@ public:
   base_iertr::future<TCachedExtentRef<T>> read_pin(
     Transaction &t,
     LBAMappingRef pin)
+  {
+    auto ret = get_extent_if_linked<T>(t, std::move(pin));
+    if (ret.index() == 1) {
+      return std::move(std::get<1>(ret));
+    } else {
+      return this->pin_to_extent<T>(t, std::move(std::get<0>(ret)));
+    }
+  }
+
+  template <typename T>
+  std::variant<LBAMappingRef, base_iertr::future<TCachedExtentRef<T>>>
+  get_extent_if_linked(
+    Transaction &t,
+    LBAMappingRef pin)
   {
     auto v = pin->get_logical_extent(t);
     if (v.has_child()) {
@@ -190,7 +204,7 @@ public:
        return extent->template cast<T>();
       });
     } else {
-      return pin_to_extent<T>(t, std::move(pin));
+      return pin;
     }
   }