]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/lba_manager: expose direct_key in ref_update_result_t
authorYingxin Cheng <yingxin.cheng@intel.com>
Wed, 2 Apr 2025 03:20:53 +0000 (11:20 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Wed, 2 Apr 2025 06:59:58 +0000 (14:59 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/lba_manager.h
src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc

index 331e8b56e1522b9a79c29976928ffc453d20d0d6..49dae667a903d0547ac32ea12bfc23134faa0dca 100644 (file)
@@ -100,6 +100,7 @@ public:
     extent_len_t len) = 0;
 
   struct ref_update_result_t {
+    laddr_t direct_key;
     extent_ref_count_t refcount = 0;
     pladdr_t addr;
     extent_len_t length = 0;
index 74d85390a333e362cc21e636ba2738907f6cea02..b88b3f526998595d676dc960d332c795729e5db5 100644 (file)
@@ -748,9 +748,10 @@ BtreeLBAManager::_decref_intermediate(
        std::move(iter),
        [&btree, addr, len, c](auto &iter) {
        ceph_assert(!iter.is_end());
-       ceph_assert(iter.get_key() <= addr);
+       laddr_t key = iter.get_key();
+       ceph_assert(key <= addr);
        auto val = iter.get_val();
-       ceph_assert(iter.get_key() + val.len >= addr + len);
+       ceph_assert(key + val.len >= addr + len);
        ceph_assert(val.pladdr.is_paddr());
        ceph_assert(val.refcount >= 1);
        val.refcount -= 1;
@@ -758,13 +759,14 @@ BtreeLBAManager::_decref_intermediate(
        LOG_PREFIX(BtreeLBAManager::_decref_intermediate);
        TRACET("decreased refcount of intermediate key {} -- {}",
          c.trans,
-         iter.get_key(),
+         key,
          val);
 
        if (!val.refcount) {
          return btree.remove(c, iter
-         ).si_then([val] {
+         ).si_then([key, val] {
            auto res = ref_update_result_t{
+             key,
              val.refcount,
              val.pladdr.get_paddr(),
              val.len
@@ -817,7 +819,7 @@ BtreeLBAManager::update_refcount(
        map_value.len
       );
     }
-    return fut.si_then([map_value, mapping=std::move(mapping)]
+    return fut.si_then([addr, map_value, mapping=std::move(mapping)]
                       (auto decref_intermediate_res) mutable {
       if (map_value.pladdr.is_laddr()
          && decref_intermediate_res) {
@@ -828,6 +830,7 @@ BtreeLBAManager::update_refcount(
       } else {
        return update_refcount_ret_bare_t{
          ref_update_result_t{
+           addr,
            map_value.refcount,
            map_value.pladdr,
            map_value.len