]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/.../btree_lba_manager: convert _update_mapping to coroutine
authorSamuel Just <sjust@redhat.com>
Sat, 18 Oct 2025 00:34:57 +0000 (17:34 -0700)
committerSamuel Just <sjust@redhat.com>
Tue, 10 Mar 2026 17:11:33 +0000 (10:11 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/lba/btree_lba_manager.cc
src/crimson/os/seastore/lba/btree_lba_manager.h

index 458e3b8ebff910ce94bca14f0174e6ab6a1a92a6..38917b132701d771a5d452188e0521f6f1afdbd4 100644 (file)
@@ -863,46 +863,40 @@ BtreeLBAManager::_update_mapping_ret
 BtreeLBAManager::_update_mapping(
   Transaction &t,
   LBACursor &cursor,
-  update_func_t &&f,
+  update_func_t f,
   LogicalChildNode* nextent)
 {
   assert(!is_reserved_ptr(nextent));
   assert(cursor.is_viewable());
   auto c = get_context(t);
-  return with_btree<LBABtree>(
-    cache,
-    c,
-    [c, f=std::move(f), &cursor, nextent](auto &btree) {
-    auto iter = btree.make_partial_iter(c, cursor);
-    auto ret = f(iter.get_val());
-    if (ret.refcount == 0) {
-      auto laddr = cursor.get_laddr();
-      return btree.remove(
-       c,
-       iter
-      ).si_then([ret, c, laddr](auto iter) {
-       return update_mapping_ret_bare_t{
-         laddr, std::move(ret), iter.get_cursor(c)};
-      });
-    } else {
-      return btree.update(
-       c,
-       iter,
-       ret,
-       // child-ptr may already be correct,
-       // see LBAManager::update_mappings()
-        nextent && !nextent->has_parent_tracker()
-          ? nextent : nullptr
-      ).si_then([c, nextent](auto iter) {
-       assert(!nextent ||
-         (nextent->has_parent_tracker()
+  auto btree = co_await get_btree<LBABtree>(cache, c);
+  auto iter = btree.make_partial_iter(c, cursor);
+  auto ret = f(iter.get_val());
+  if (ret.refcount == 0) {
+    auto laddr = cursor.get_laddr();
+    iter = co_await btree.remove(
+      c,
+      iter
+    );
+    co_return update_mapping_ret_bare_t{
+      laddr, std::move(ret), iter.get_cursor(c)};
+  } else {
+    iter = co_await btree.update(
+      c,
+      iter,
+      ret,
+      // child-ptr may already be correct,
+      // see LBAManager::update_mappings()
+      nextent && !nextent->has_parent_tracker()
+        ? nextent : nullptr
+    );
+    assert(!nextent ||
+          (nextent->has_parent_tracker()
            && nextent->peek_parent_node().get() == iter.get_leaf_node().get()));
-       LBACursorRef cursor = iter.get_cursor(c);
-       assert(!cursor->is_end());
-       return update_mapping_ret_bare_t{std::move(cursor)};
-      });
-    }
-  });
+    LBACursorRef cursor = iter.get_cursor(c);
+    assert(!cursor->is_end());
+    co_return update_mapping_ret_bare_t{std::move(cursor)};
+  }
 }
 
 BtreeLBAManager::scan_mapped_space_ret
index 57417630cb4bc3974604050e07ee9591f6da6016..9d55d5037a578211dec70ad319bd132084f77699 100644 (file)
@@ -411,7 +411,7 @@ private:
   _update_mapping_ret _update_mapping(
     Transaction &t,
     LBACursor &cursor,
-    update_func_t &&f,
+    update_func_t f,
     LogicalChildNode*);
 
   struct insert_position_t {