From: Xuehan Xu Date: Sat, 11 Oct 2025 02:39:26 +0000 (+0800) Subject: crimson/os/seastore/lba_manager: make sure alloc_extents return viewable X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cafa0b5daaa6e451f28a70142112ff2757beb0a8;p=ceph-ci.git crimson/os/seastore/lba_manager: make sure alloc_extents return viewable mappings Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/os/seastore/lba/btree_lba_manager.cc b/src/crimson/os/seastore/lba/btree_lba_manager.cc index 552f1b0cf8e..a2c5a914e4a 100644 --- a/src/crimson/os/seastore/lba/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba/btree_lba_manager.cc @@ -673,12 +673,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(); @@ -705,11 +705,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(0), + boost::make_counting_iterator(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>(std::move(ret));