From: Xuehan Xu Date: Thu, 9 May 2024 11:59:19 +0000 (+0800) Subject: crimson/os/seastore/transaction_manager: add get_extent_if_linked() interface X-Git-Tag: v19.1.1~249^2~6 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=b2b17e92400da3f897622bdf930867d2ab4959e0;p=ceph.git crimson/os/seastore/transaction_manager: add get_extent_if_linked() interface Signed-off-by: Xuehan Xu (cherry picked from commit a6f90bc27ec62c6595028aa97524abffd682dcf3) --- diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index 862bd9fa12f97..917295d37f13e 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -175,6 +175,20 @@ public: base_iertr::future> read_pin( Transaction &t, LBAMappingRef pin) + { + auto ret = get_extent_if_linked(t, std::move(pin)); + if (ret.index() == 1) { + return std::move(std::get<1>(ret)); + } else { + return this->pin_to_extent(t, std::move(std::get<0>(ret))); + } + } + + template + std::variant>> + 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(); }); } else { - return pin_to_extent(t, std::move(pin)); + return pin; } }