From: Samuel Just Date: Tue, 23 Sep 2025 21:08:28 +0000 (-0700) Subject: crimson/.../btree_lba_manager: convert get_cursors to coroutine X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=76f74986f4bd86108131d09fa92c79813b973977;p=ceph-ci.git crimson/.../btree_lba_manager: convert get_cursors 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 5ecaca79a82..777189b958e 100644 --- a/src/crimson/os/seastore/lba/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba/btree_lba_manager.cc @@ -172,33 +172,23 @@ BtreeLBAManager::get_cursors( { LOG_PREFIX(BtreeLBAManager::get_cursors); TRACET("{}~0x{:x} ...", c.trans, laddr, length); - return seastar::do_with( - std::list(), - [FNAME, c, laddr, length, &btree](auto& ret) - { - return LBABtree::iterate_repeat( - c, - btree.upper_bound_right(c, laddr), - [FNAME, c, laddr, length, &ret](auto& pos) - { - if (pos.is_end() || pos.get_key() >= (laddr + length)) { - TRACET("{}~0x{:x} done with {} results, stop at {}", - c.trans, laddr, length, ret.size(), pos); - return LBABtree::iterate_repeat_ret_inner( - interruptible::ready_future_marker{}, - seastar::stop_iteration::yes); - } - TRACET("{}~0x{:x} got {}, repeat ...", - c.trans, laddr, length, pos); - ceph_assert((pos.get_key() + pos.get_val().len) > laddr); - ret.emplace_back(pos.get_cursor(c)); - return LBABtree::iterate_repeat_ret_inner( - interruptible::ready_future_marker{}, - seastar::stop_iteration::no); - }).si_then([&ret] { - return std::move(ret); - }); - }); + + std::list ret; + + auto pos = co_await btree.upper_bound_right(c, laddr); + while (true) { + if (pos.is_end() || pos.get_key() >= (laddr + length)) { + TRACET("{}~0x{:x} done with {} results, stop at {}", + c.trans, laddr, length, ret.size(), pos); + break; + } + TRACET("{}~0x{:x} got {}, repeat ...", + c.trans, laddr, length, pos); + ceph_assert((pos.get_key() + pos.get_val().len) > laddr); + ret.emplace_back(pos.get_cursor(c)); + pos = co_await pos.next(c); + } + co_return ret; } BtreeLBAManager::resolve_indirect_cursor_ret