From: Yingxin Cheng Date: Thu, 24 Oct 2024 05:45:55 +0000 (+0800) Subject: crimson/os/seastore/transaction_manager: fix to use direct key/length to get absent... X-Git-Tag: testing/wip-vshankar-testing-20241129.105255-debug~9^2~13 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=59d692f8f05d78124f5e0adbcdfcac18d7522eec;p=ceph-ci.git crimson/os/seastore/transaction_manager: fix to use direct key/length to get absent extent Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index 5cba9c4ab38..e81ce553336 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -920,12 +920,13 @@ private: static_assert(is_logical_type(T::TYPE)); using ret = pin_to_extent_ret; auto &pref = *pin; + auto direct_length = pref.is_indirect() ? + pref.get_intermediate_length() : + pref.get_length(); return cache->get_absent_extent( t, pref.get_val(), - pref.is_indirect() ? - pref.get_intermediate_length() : - pref.get_length(), + direct_length, [&pref] (T &extent) mutable { assert(!extent.has_laddr()); @@ -984,14 +985,21 @@ private: t, *pin, type); assert(is_logical_type(type)); auto &pref = *pin; + laddr_t direct_key; + extent_len_t direct_length; + if (pref.is_indirect()) { + direct_key = pref.get_intermediate_base(); + direct_length = pref.get_intermediate_length(); + } else { + direct_key = pref.get_key(); + direct_length = pref.get_length(); + } return cache->get_absent_extent_by_type( t, type, pref.get_val(), - pref.get_key(), - pref.is_indirect() ? - pref.get_intermediate_length() : - pref.get_length(), + direct_key, + direct_length, [&pref](CachedExtent &extent) mutable { auto &lextent = static_cast(extent); assert(!lextent.has_laddr());