]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.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>
Mon, 5 Jan 2026 21:14:59 +0000 (13:14 -0800)
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 2e2895c19d91258eb5a0b4f245fdf9a1a8158873..59b35ed6b50c72c89fc43beab5374c7d2c3d067a 100644 (file)
@@ -857,46 +857,39 @@ BtreeLBAManager::_update_mapping_ret
 BtreeLBAManager::_update_mapping(
   Transaction &t,
   LBACursor &cursor,
-  update_func_t &&f,
+  update_func_t f,
   LogicalChildNode* 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) {
-      return btree.remove(
-       c,
-       iter
-      ).si_then([ret, c, laddr=cursor.key](auto iter) {
-       return update_mapping_ret_bare_t{
-         laddr, std::move(ret), iter.get_cursor(c)};
-      });
-    } else {
-      return btree.update(
-       c,
-       iter,
-       ret
-      ).si_then([c, nextent](auto iter) {
-       // child-ptr may already be correct,
-       // see LBAManager::update_mappings()
-       if (nextent && !nextent->has_parent_tracker()) {
-         iter.get_leaf_node()->update_child_ptr(
-           iter.get_leaf_pos(), nextent);
-       }
-       assert(!nextent ||
-         (nextent->has_parent_tracker()
-           && nextent->peek_parent_node().get() == iter.get_leaf_node().get()));
-       LBACursorRef cursor = iter.get_cursor(c);
-       assert(cursor->val);
-       return update_mapping_ret_bare_t{std::move(cursor)};
-      });
+  auto btree = co_await get_btree<LBABtree>(cache, c);
+  auto iter = btree.make_partial_iter(c, cursor);
+  auto ret = f(iter.get_val());
+  auto laddr = cursor.key;
+  if (ret.refcount == 0) {
+    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
+    );
+    if (nextent && !nextent->has_parent_tracker()) {
+      iter.get_leaf_node()->update_child_ptr(
+       iter.get_leaf_pos(), nextent);
     }
-  });
+    assert(!nextent ||
+          (nextent->has_parent_tracker()
+           && nextent->peek_parent_node().get() == iter.get_leaf_node().get()));
+    LBACursorRef cursor = iter.get_cursor(c);
+    assert(cursor->val);
+    co_return update_mapping_ret_bare_t{std::move(cursor)};
+  }
 }
 
 BtreeLBAManager::get_cursor_ret
index 522e3419be7c9a12e5594ea9899b6523bda11269..87b60e06d315aa3f45b0f2b7f55b0ad0d65d0f55 100644 (file)
@@ -398,7 +398,7 @@ private:
   _update_mapping_ret _update_mapping(
     Transaction &t,
     LBACursor &cursor,
-    update_func_t &&f,
+    update_func_t f,
     LogicalChildNode*);
 
   struct insert_position_t {