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=47f2cd1f1ca9efd3184fed8aa0d7d8561bf9d86b;p=ceph.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 7457ee2e5df..d633918567a 100644 --- a/src/crimson/os/seastore/lba/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba/btree_lba_manager.cc @@ -370,18 +370,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( auto &[it, inserted] = p; ceph_assert(inserted); 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 4886ae5536a..3642ed46f65 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 fd0e5a7881d..159c5508a44 100644 --- a/src/crimson/os/seastore/lba_manager.h +++ b/src/crimson/os/seastore/lba_manager.h @@ -114,7 +114,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, @@ -127,7 +127,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 4e6ade4aea9..fbfa10ac8bd 100644 --- a/src/crimson/os/seastore/lba_mapping.h +++ b/src/crimson/os/seastore/lba_mapping.h @@ -218,6 +218,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 02a55fd4b94..16b2e26911c 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 a037a855889..72ceefc85b8 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -562,16 +562,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 } ));