From 7e24f088ba9e43b2dae34959cf01429d7bba8314 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Wed, 23 Apr 2025 14:38:43 +0800 Subject: [PATCH] crimson/os/seastore: more accurate checks to the paddr types Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/btree/fixed_kv_node.h | 8 +++++--- src/crimson/os/seastore/cache.cc | 13 ++++++++----- src/crimson/os/seastore/cache.h | 2 +- src/crimson/os/seastore/cached_extent.h | 2 +- src/crimson/os/seastore/transaction.h | 8 +++----- src/crimson/os/seastore/transaction_manager.cc | 3 ++- 6 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/crimson/os/seastore/btree/fixed_kv_node.h b/src/crimson/os/seastore/btree/fixed_kv_node.h index 56c3eae1742ff..12cdd340d618a 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_node.h +++ b/src/crimson/os/seastore/btree/fixed_kv_node.h @@ -68,12 +68,14 @@ struct FixedKVNode : CachedExtent { * Upon commit, these now block relative addresses will be interpretted * against the real final address. */ - if (!get_paddr().is_absolute()) { + if (get_paddr().is_record_relative()) { // backend_type_t::SEGMENTED - assert(get_paddr().is_record_relative()); resolve_relative_addrs( make_record_relative_paddr(0).block_relative_to(get_paddr())); - } // else: backend_type_t::RANDOM_BLOCK + } else { + // backend_type_t::RANDOM_BLOCK + assert(get_paddr().is_absolute()); + } } void on_delta_write(paddr_t record_block_offset) final { diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 3c224137f0dc7..b9f13e3525d03 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -71,8 +71,8 @@ Cache::retire_extent_ret Cache::retire_extent_addr( ceph_abort(); } - // any relative paddr must have been on the transaction - assert(!paddr.is_relative()); + // 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 @@ -97,6 +97,8 @@ Cache::retire_extent_ret Cache::retire_extent_addr( void Cache::retire_absent_extent_addr( Transaction &t, paddr_t paddr, extent_len_t length) { + assert(paddr.is_absolute()); + CachedExtentRef ext; #ifndef NDEBUG auto result = t.get_extent(paddr, &ext); @@ -1461,7 +1463,7 @@ record_t Cache::prepare_record( for (auto &i: t.ool_block_list) { TRACET("fresh ool extent -- {}", t, *i); ceph_assert(i->is_valid()); - assert(!i->is_inline()); + assert(i->get_paddr().is_absolute()); get_by_ext(efforts.fresh_ool_by_ext, i->get_type()).increment(i->get_length()); if (is_backref_mapped_type(i->get_type())) { @@ -1975,9 +1977,10 @@ Cache::replay_delta( decode(alloc_delta, delta.bl); backref_entry_refs_t backref_entries; for (auto &alloc_blk : alloc_delta.alloc_blk_ranges) { - if (alloc_blk.paddr.is_relative()) { - assert(alloc_blk.paddr.is_record_relative()); + if (alloc_blk.paddr.is_record_relative()) { alloc_blk.paddr = record_base.add_relative(alloc_blk.paddr); + } else { + ceph_assert(alloc_blk.paddr.is_absolute()); } DEBUG("replay alloc_blk {}~0x{:x} {}, journal_seq: {}", alloc_blk.paddr, alloc_blk.len, alloc_blk.laddr, journal_seq); diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 8e597cafd1160..b52db40077852 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -1520,7 +1520,7 @@ private: paddr_t paddr, paddr_t key, extent_types_t type) { - assert(!paddr.is_relative()); + assert(paddr.is_absolute()); auto [iter, inserted] = backref_extents.emplace(paddr, key, type); boost::ignore_unused(inserted); assert(inserted); diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index d7b47d3cae126..ee4b098ffaa0e 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -760,7 +760,7 @@ public: } bool is_inline() const { - return poffset.is_relative(); + return poffset.is_record_relative(); } paddr_t get_prior_paddr_and_reset() { diff --git a/src/crimson/os/seastore/transaction.h b/src/crimson/os/seastore/transaction.h index e217c54f79ddc..9de630daa90a0 100644 --- a/src/crimson/os/seastore/transaction.h +++ b/src/crimson/os/seastore/transaction.h @@ -217,28 +217,26 @@ public: } void mark_delayed_extent_ool(CachedExtentRef& ref) { + assert(ref->get_paddr().is_delayed()); ool_block_list.push_back(ref); } void update_delayed_ool_extent_addr(LogicalCachedExtentRef& ref, paddr_t final_addr) { - write_set.erase(*ref); assert(ref->get_paddr().is_delayed()); + assert(final_addr.is_absolute()); + write_set.erase(*ref); ref->set_paddr(final_addr, /* need_update_mapping: */ true); - assert(!ref->get_paddr().is_null()); - assert(!ref->is_inline()); write_set.insert(*ref); } void mark_allocated_extent_ool(CachedExtentRef& ref) { assert(ref->get_paddr().is_absolute()); - assert(!ref->is_inline()); ool_block_list.push_back(ref); } void mark_inplace_rewrite_extent_ool(LogicalCachedExtentRef ref) { assert(ref->get_paddr().is_absolute_random_block()); - assert(!ref->is_inline()); inplace_ool_block_list.push_back(ref); } diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index dd77577315e9d..ac11813f31381 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -151,9 +151,10 @@ TransactionManager::mount() extent_len_t len, extent_types_t type, laddr_t laddr) { + assert(paddr.is_absolute()); if (is_backref_node(type)) { assert(laddr == L_ADDR_NULL); - assert(backref_key != P_ADDR_NULL); + assert(backref_key.is_absolute() || backref_key == P_ADDR_MIN); backref_manager->cache_new_backref_extent(paddr, backref_key, type); cache->update_tree_extents_num(type, 1); epm->mark_space_used(paddr, len); -- 2.39.5