]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/.../btree_lba_manager: convert get_cursors to coroutine
authorSamuel Just <sjust@redhat.com>
Tue, 23 Sep 2025 21:08:28 +0000 (14:08 -0700)
committerSamuel Just <sjust@redhat.com>
Mon, 5 Jan 2026 20:44:37 +0000 (12:44 -0800)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/lba/btree_lba_manager.cc

index 8979e09f8b467bae55a3fabce12e3f4b4b385a66..625b72225d7b4f56a40f83278c9abc8177787e81 100644 (file)
@@ -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<LBACursorRef>(),
-    [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<LBACursorRef> 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