From f781eeaa8e3fe93cbd59efe6aeb8f83eba5f751a Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Thu, 21 May 2026 14:50:42 +0800 Subject: [PATCH] crimson/os/seastore/cache: remove retire_extent_addr Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/cache.cc | 45 ------------------- src/crimson/os/seastore/cache.h | 6 --- .../seastore/test_btree_lba_manager.cc | 31 +++++++++++-- 3 files changed, 27 insertions(+), 55 deletions(-) diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index d8041d01d9b5..8272db88fde1 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -50,51 +50,6 @@ Cache::~Cache() ceph_assert(extents_index.empty()); } -// TODO: this method can probably be removed in the future -Cache::retire_extent_ret Cache::retire_extent_addr( - Transaction &t, paddr_t paddr, extent_len_t length) -{ - LOG_PREFIX(Cache::retire_extent_addr); - TRACET("retire {}~0x{:x}", t, paddr, length); - - assert(paddr.is_real_location()); - - CachedExtentRef ext; - auto result = t.get_extent(paddr, &ext); - if (result == Transaction::get_extent_ret::PRESENT) { - DEBUGT("retire {}~0x{:x} on t -- {}", - t, paddr, length, *ext); - t.add_present_to_retired_set(ext); - return retire_extent_iertr::now(); - } else if (result == Transaction::get_extent_ret::RETIRED) { - ERRORT("retire {}~0x{:x} failed, already retired -- {}", - t, paddr, length, *ext); - ceph_abort(); - } - - // any record-relative or delayed paddr must have been on the transaction - assert(paddr.is_absolute()); - - // absent from transaction - // retiring is not included by the cache hit metrics - ext = query_cache(paddr); - if (ext) { - DEBUGT("retire {}~0x{:x} in cache -- {}", t, paddr, length, *ext); - } else { - // add a new placeholder to Cache - ext = CachedExtent::make_cached_extent_ref< - RetiredExtentPlaceholder>(length); - ext->init( - CachedExtent::extent_state_t::CLEAN, paddr, - PLACEMENT_HINT_NULL, NULL_GENERATION, TRANS_ID_NULL); - DEBUGT("retire {}~0x{:x} as placeholder, add extent -- {}", - t, paddr, length, *ext); - add_extent(ext); - } - t.add_absent_to_retired_set(ext); - return retire_extent_iertr::now(); -} - CachedExtentRef Cache::retire_absent_extent_addr_by_type( Transaction &t, laddr_t laddr, diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index b900b3b6cb9d..207888494c7f 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -154,12 +154,6 @@ public: t.add_present_to_retired_set(ref); } - /// Declare paddr retired in t - using retire_extent_iertr = base_iertr; - using retire_extent_ret = base_iertr::future<>; - retire_extent_ret retire_extent_addr( - Transaction &t, paddr_t addr, extent_len_t length); - template TCachedExtentRef retire_absent_extent_addr( Transaction &t, diff --git a/src/test/crimson/seastore/test_btree_lba_manager.cc b/src/test/crimson/seastore/test_btree_lba_manager.cc index 28c033f6a497..af05e02b7c77 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -603,16 +603,39 @@ struct btree_lba_manager_test : btree_test_base { auto refcount = cursor->get_refcount() - 1; auto paddr = cursor->get_paddr(); auto length = cursor->get_length(); + if (refcount == 0) { + auto p = cursor->parent->template cast(); + auto v = p->template get_child( + t, cursor->ctx.cache, cursor->get_pos(), cursor->key); + if (v.has_child()) { + auto extent = co_await v.template get_child_fut_as(); + ceph_assert(extent); + cache->retire_extent(t, std::move(extent)); + } else { + auto &child_pos = v.get_child_pos(); + cache->retire_absent_extent_addr_by_type( + t, + cursor->key, + paddr, + length, + cursor->get_extent_type(), + [&child_pos, &t, laddr=cursor->key, this](auto &extent) { + auto lextent = extent.template cast(); + ASSERT_TRUE(extent.is_logical()); + ASSERT_FALSE(lextent->has_laddr()); + ASSERT_FALSE(extent.has_been_invalidated()); + child_pos.link_child(lextent.get()); + child_pos.invalidate_retired_placeholder(t, *cache, extent); + lextent->set_laddr(laddr); + }); + } + } co_await lba_manager->update_mapping_refcount( t, cursor, -1 ); EXPECT_EQ(refcount, target->second.refcount); - if (refcount == 0) { - co_await cache->retire_extent_addr( - t, paddr, length); - } })).unsafe_get(); if (target->second.refcount == 0) { t.mappings.erase(target); -- 2.47.3