]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/lba_manager: make sure alloc_extents return viewable
authorXuehan Xu <xuxuehan@qianxin.com>
Sat, 11 Oct 2025 02:39:26 +0000 (10:39 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Tue, 10 Feb 2026 02:54:32 +0000 (10:54 +0800)
mappings

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/os/seastore/lba/btree_lba_manager.cc

index 9d8ba4871305a31a78c9f800fc02b633ad6731c1..57b92ef6643abcbae0c5305905217ae6773eb8d4 100644 (file)
@@ -684,12 +684,12 @@ BtreeLBAManager::insert_mappings(
     return trans_intr::do_for_each(
       alloc_infos.begin(),
       alloc_infos.end(),
-      [c, &btree, &iter, &ret](auto &info)
+      [c, &btree, &iter](auto &info)
     {
       assert(info.key != L_ADDR_NULL);
       return btree.insert(
        c, iter, info.key, info.value
-      ).si_then([c, &iter, &ret, &info](auto p) {
+      ).si_then([c, &iter, &info](auto p) {
        ceph_assert(p.second);
        iter = std::move(p.first);
        auto &leaf_node = *iter.get_leaf_node();
@@ -716,11 +716,20 @@ BtreeLBAManager::insert_mappings(
            info.extent->set_laddr(iter.get_key());
          }
        }
-       ret.push_back(iter.get_cursor(c));
        return iter.next(c).si_then([&iter](auto p) {
          iter = std::move(p);
        });
       });
+    }).si_then([&ret, &iter, alloc_infos, c] {
+      return trans_intr::do_for_each(
+       boost::make_counting_iterator<size_t>(0),
+       boost::make_counting_iterator<size_t>(alloc_infos.size()),
+       [&ret, &iter, c](auto) {
+       return iter.prev(c).si_then([c, &ret, &iter](auto it) {
+         ret.push_front(it.get_cursor(c));
+         iter = std::move(it);
+       });
+      });
     }).si_then([&ret] {
       return alloc_mappings_iertr::make_ready_future<
        std::list<LBACursorRef>>(std::move(ret));