From: Samuel Just Date: Sat, 18 Oct 2025 00:34:57 +0000 (-0700) Subject: crimson/.../btree_lba_manager: convert _update_mapping to coroutine X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=15611b6b09756b865c5c7780a294891eb55b28c2;p=ceph-ci.git crimson/.../btree_lba_manager: convert _update_mapping to coroutine Signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/lba/btree_lba_manager.cc b/src/crimson/os/seastore/lba/btree_lba_manager.cc index 2e2895c19d9..59b35ed6b50 100644 --- a/src/crimson/os/seastore/lba/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba/btree_lba_manager.cc @@ -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( - 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(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 diff --git a/src/crimson/os/seastore/lba/btree_lba_manager.h b/src/crimson/os/seastore/lba/btree_lba_manager.h index 522e3419be7..87b60e06d31 100644 --- a/src/crimson/os/seastore/lba/btree_lba_manager.h +++ b/src/crimson/os/seastore/lba/btree_lba_manager.h @@ -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 {