From: Samuel Just Date: Fri, 10 Oct 2025 01:53:32 +0000 (+0000) Subject: crimson/.../lba_manager: convert alloc_extents_ret to use LBACursor X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4a89f3f65083cf1c681ac8de1af32bb1c4a50eb9;p=ceph-ci.git crimson/.../lba_manager: convert alloc_extents_ret to use LBACursor 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 1f5353eafd8..dffed25cac7 100644 --- a/src/crimson/os/seastore/lba/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba/btree_lba_manager.cc @@ -367,18 +367,15 @@ BtreeLBAManager::reserve_region( BtreeLBAManager::alloc_extents_ret BtreeLBAManager::alloc_extents( Transaction &t, - LBAMapping pos, + LBACursorRef cursor, std::vector extents) { LOG_PREFIX(BtreeLBAManager::alloc_extents); - DEBUGT("{}", t, pos); - assert(pos.is_viewable()); + DEBUGT("{}", t, *cursor); auto c = get_context(t); auto btree = co_await get_btree(cache, c); - auto &cursor = pos.get_effective_cursor(); - co_await cursor.refresh(); - auto iter = btree.make_partial_iter(c, cursor); - std::vector ret; + auto iter = btree.make_partial_iter(c, *cursor); + std::vector ret; for (auto eiter = extents.rbegin(); eiter != extents.rend(); ++eiter) { auto ext = *eiter; assert(ext->has_laddr()); @@ -401,7 +398,7 @@ BtreeLBAManager::alloc_extents( ext.get(), leaf_node.get_size() - 1 /*the size before the insert*/); TRACET("inserted {}", c.trans, *ext); - ret.emplace(ret.begin(), LBAMapping::create_direct(it.get_cursor(c))); + ret.emplace(ret.begin(), it.get_cursor(c)); iter = it; #ifndef NDEBUG if (eiter != extents.rend()) { diff --git a/src/crimson/os/seastore/lba/btree_lba_manager.h b/src/crimson/os/seastore/lba/btree_lba_manager.h index 349d876fee1..d330c8b85c2 100644 --- a/src/crimson/os/seastore/lba/btree_lba_manager.h +++ b/src/crimson/os/seastore/lba/btree_lba_manager.h @@ -122,7 +122,7 @@ public: alloc_extents_ret alloc_extents( Transaction &t, - LBAMapping pos, + LBACursorRef pos, std::vector ext) final; alloc_extent_ret alloc_extent( @@ -187,11 +187,7 @@ public: cursors = co_await alloc_contiguous_mappings( t, hint, alloc_infos, alloc_policy_t::linear_search); } - std::vector ret; - for (auto &cursor : cursors) { - ret.emplace_back(LBAMapping::create_direct(std::move(cursor))); - } - co_return ret; + co_return std::vector(cursors.begin(), cursors.end()); } base_iertr::future update_mapping_refcount( diff --git a/src/crimson/os/seastore/lba_manager.h b/src/crimson/os/seastore/lba_manager.h index ddb5ee4f9a9..80d815dab92 100644 --- a/src/crimson/os/seastore/lba_manager.h +++ b/src/crimson/os/seastore/lba_manager.h @@ -111,7 +111,7 @@ public: extent_ref_count_t refcount) = 0; using alloc_extents_ret = alloc_extent_iertr::future< - std::vector>; + std::vector>; virtual alloc_extents_ret alloc_extents( Transaction &t, laddr_t hint, @@ -124,7 +124,7 @@ public: */ virtual alloc_extents_ret alloc_extents( Transaction &t, - LBAMapping pos, + LBACursorRef cursor, std::vector ext) = 0; struct clone_mapping_ret_t { diff --git a/src/crimson/os/seastore/lba_mapping.h b/src/crimson/os/seastore/lba_mapping.h index 7592f90b4f6..d17da459107 100644 --- a/src/crimson/os/seastore/lba_mapping.h +++ b/src/crimson/os/seastore/lba_mapping.h @@ -207,6 +207,13 @@ private: return *direct_cursor; } + LBACursorRef get_effective_cursor_ref() { + if (is_indirect()) { + return indirect_cursor; + } + return direct_cursor; + } + bool is_null() const { return !direct_cursor && !indirect_cursor; } diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index c307c88e4f1..15aff3f3e31 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -464,7 +464,7 @@ public: auto npos = co_await pos->refresh(); co_await lba_manager->alloc_extents( t, - std::move(npos), + npos.get_effective_cursor_ref(), std::vector( exts.begin(), exts.end())); } else { diff --git a/src/test/crimson/seastore/test_btree_lba_manager.cc b/src/test/crimson/seastore/test_btree_lba_manager.cc index be870746b52..33abb1b43f4 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -565,16 +565,16 @@ struct btree_lba_manager_test : btree_test_base { }); }).unsafe_get(); for (auto &ret : rets) { - logger().debug("alloc'd: {}", ret); - EXPECT_EQ(len, ret.get_length()); - auto [b, e] = get_overlap(t, ret.get_key(), len); + logger().debug("alloc'd: {}", *ret); + EXPECT_EQ(len, ret->get_length()); + auto [b, e] = get_overlap(t, ret->get_laddr(), len); EXPECT_EQ(b, e); t.mappings.emplace( std::make_pair( - ret.get_key(), + ret->get_laddr(), test_extent_t{ - ret.get_val(), - ret.get_length(), + ret->get_paddr(), + ret->get_length(), 1 } ));