From a6f90bc27ec62c6595028aa97524abffd682dcf3 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Thu, 9 May 2024 19:59:19 +0800 Subject: [PATCH] crimson/os/seastore/transaction_manager: add get_extent_if_linked() interface Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/transaction_manager.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index 1f1ebeceb3d50..67e041758157e 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; } } -- 2.39.5