From 5cc1b6375b5dbb2073989779fd212c2e1024898c Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Wed, 23 Apr 2025 14:59:25 +0800 Subject: [PATCH] crimson/os/seastore/seastore_types: prefer paddr_t::is_absolute_*() Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/async_cleaner.cc | 10 +++---- .../seastore/backref/btree_backref_manager.cc | 2 +- src/crimson/os/seastore/cache.cc | 9 +++---- src/crimson/os/seastore/record_scanner.h | 4 +-- src/crimson/os/seastore/seastore_types.cc | 4 +-- src/crimson/os/seastore/seastore_types.h | 27 +++++++++---------- .../os/seastore/transaction_manager.cc | 4 +-- 7 files changed, 28 insertions(+), 32 deletions(-) diff --git a/src/crimson/os/seastore/async_cleaner.cc b/src/crimson/os/seastore/async_cleaner.cc index 60e2635c3cff9..d3880a7ce1e9c 100644 --- a/src/crimson/os/seastore/async_cleaner.cc +++ b/src/crimson/os/seastore/async_cleaner.cc @@ -1521,7 +1521,7 @@ bool SegmentCleaner::check_usage() extent_types_t type, laddr_t laddr) { - if (paddr.get_addr_type() == paddr_types_t::SEGMENT) { + if (paddr.is_absolute_segmented()) { if (is_backref_node(type)) { assert(laddr == L_ADDR_NULL); assert(backref_key.is_absolute_segmented() @@ -1557,7 +1557,7 @@ void SegmentCleaner::mark_space_used( assert(background_callback->get_state() >= state_t::SCAN_SPACE); assert(len); // TODO: drop - if (addr.get_addr_type() != paddr_types_t::SEGMENT) { + if (!addr.is_absolute_segmented()) { return; } @@ -1588,7 +1588,7 @@ void SegmentCleaner::mark_space_free( assert(background_callback->get_state() >= state_t::SCAN_SPACE); assert(len); // TODO: drop - if (addr.get_addr_type() != paddr_types_t::SEGMENT) { + if (!addr.is_absolute_segmented()) { return; } @@ -1722,7 +1722,7 @@ void RBMCleaner::mark_space_used( extent_len_t len) { LOG_PREFIX(RBMCleaner::mark_space_used); - assert(addr.get_addr_type() == paddr_types_t::RANDOM_BLOCK); + assert(addr.is_absolute_random_block()); auto rbms = rb_group->get_rb_managers(); for (auto rbm : rbms) { if (addr.get_device_id() == rbm->get_device_id()) { @@ -1741,7 +1741,7 @@ void RBMCleaner::mark_space_free( extent_len_t len) { LOG_PREFIX(RBMCleaner::mark_space_free); - assert(addr.get_addr_type() == paddr_types_t::RANDOM_BLOCK); + assert(addr.is_absolute_random_block()); auto rbms = rb_group->get_rb_managers(); for (auto rbm : rbms) { if (addr.get_device_id() == rbm->get_device_id()) { diff --git a/src/crimson/os/seastore/backref/btree_backref_manager.cc b/src/crimson/os/seastore/backref/btree_backref_manager.cc index c021ad92b3f9f..bf912b3464724 100644 --- a/src/crimson/os/seastore/backref/btree_backref_manager.cc +++ b/src/crimson/os/seastore/backref/btree_backref_manager.cc @@ -161,7 +161,7 @@ BtreeBackrefManager::new_mapping( { ceph_assert( is_aligned( - key.get_addr_type() == paddr_types_t::SEGMENT ? + key.is_absolute_segmented() ? key.as_seg_paddr().get_segment_off() : key.as_blk_paddr().get_device_off(), cache.get_block_size())); diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index b9f13e3525d03..12681a44912a8 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -1269,8 +1269,7 @@ record_t Cache::prepare_record( assert(can_inplace_rewrite(i->prior_instance->get_type())); assert(i->prior_instance->dirty_from_or_retired_at == JOURNAL_SEQ_MIN); assert(i->prior_instance->state == CachedExtent::extent_state_t::CLEAN); - assert(i->prior_instance->get_paddr().get_addr_type() == - paddr_types_t::RANDOM_BLOCK); + assert(i->prior_instance->get_paddr().is_absolute_random_block()); i->version = 1; } @@ -1310,7 +1309,7 @@ record_t Cache::prepare_record( auto stype = segment_type_t::NULL_SEG; // FIXME: This is specific to the segmented implementation - if (i->get_paddr().get_addr_type() == paddr_types_t::SEGMENT) { + if (i->get_paddr().is_absolute_segmented()) { auto sid = i->get_paddr().as_seg_paddr().get_segment_id(); auto sinfo = get_segment_info(sid); if (sinfo) { @@ -2063,7 +2062,7 @@ Cache::replay_delta( DEBUG("replay extent delta at {} {} ... -- {}, prv_extent={}", journal_seq, record_base, delta, *extent); - if (delta.paddr.get_addr_type() == paddr_types_t::SEGMENT || + if (delta.paddr.is_absolute_segmented() || !can_inplace_rewrite(delta.type)) { ceph_assert_always(extent->last_committed_crc == delta.prev_crc); assert(extent->version == delta.pversion); @@ -2071,7 +2070,7 @@ Cache::replay_delta( extent->set_modify_time(modify_time); ceph_assert_always(extent->last_committed_crc == delta.final_crc); } else { - assert(delta.paddr.get_addr_type() == paddr_types_t::RANDOM_BLOCK); + assert(delta.paddr.is_absolute_random_block()); // see prepare_record(), inplace rewrite might cause version mismatch extent->apply_delta_and_adjust_crc(record_base, delta.bl); extent->set_modify_time(modify_time); diff --git a/src/crimson/os/seastore/record_scanner.h b/src/crimson/os/seastore/record_scanner.h index 2cb17af8df9df..3420f6b7770c1 100644 --- a/src/crimson/os/seastore/record_scanner.h +++ b/src/crimson/os/seastore/record_scanner.h @@ -30,11 +30,11 @@ public: ); ///< @return used budget device_off_t get_segment_off(paddr_t addr) const { - if (addr.get_addr_type() == paddr_types_t::SEGMENT) { + if (addr.is_absolute_segmented()) { auto& seg_addr = addr.as_seg_paddr(); return seg_addr.get_segment_off(); } - assert(addr.get_addr_type() == paddr_types_t::RANDOM_BLOCK); + assert(addr.is_absolute_random_block()); auto& blk_addr = addr.as_blk_paddr(); return blk_addr.get_device_off(); } diff --git a/src/crimson/os/seastore/seastore_types.cc b/src/crimson/os/seastore/seastore_types.cc index 24fb135cfa585..a22d77aa0b1b3 100644 --- a/src/crimson/os/seastore/seastore_types.cc +++ b/src/crimson/os/seastore/seastore_types.cc @@ -127,12 +127,12 @@ std::ostream &operator<<(std::ostream &out, const paddr_t &rhs) out << device_id_printer_t{id} << ",0x" << std::hex << s.get_device_off() << std::dec; - } else if (rhs.get_addr_type() == paddr_types_t::SEGMENT) { + } else if (rhs.is_absolute_segmented()) { auto &s = rhs.as_seg_paddr(); out << s.get_segment_id() << ",0x" << std::hex << s.get_segment_off() << std::dec; - } else if (rhs.get_addr_type() == paddr_types_t::RANDOM_BLOCK) { + } else if (rhs.is_absolute_random_block()) { auto &s = rhs.as_blk_paddr(); out << device_id_printer_t{s.get_device_id()} << ",0x" diff --git a/src/crimson/os/seastore/seastore_types.h b/src/crimson/os/seastore/seastore_types.h index 5871c2f51ea0c..f797321e1fb56 100644 --- a/src/crimson/os/seastore/seastore_types.h +++ b/src/crimson/os/seastore/seastore_types.h @@ -565,10 +565,6 @@ public: return static_cast(internal_paddr >> DEVICE_OFF_BITS); } - paddr_types_t get_addr_type() const { - return device_id_to_paddr_type(get_device_id()); - } - paddr_t add_offset(device_off_t o) const; paddr_t add_relative(paddr_t o) const; @@ -701,7 +697,7 @@ private: encode_device_off(offset)) { assert(offset >= DEVICE_OFF_MIN); assert(offset <= DEVICE_OFF_MAX); - assert(get_addr_type() != paddr_types_t::SEGMENT); + assert(!is_absolute_segmented()); } paddr_t(internal_paddr_t val); @@ -711,6 +707,10 @@ private: : internal_paddr((static_cast(d_id) << DEVICE_OFF_BITS) | static_cast(offset)) {} + paddr_types_t get_addr_type() const { + return device_id_to_paddr_type(get_device_id()); + } + friend struct paddr_le_t; friend struct pladdr_le_t; @@ -827,22 +827,22 @@ inline paddr_t make_delayed_temp_paddr(device_off_t off) { } inline const seg_paddr_t& paddr_t::as_seg_paddr() const { - assert(get_addr_type() == paddr_types_t::SEGMENT); + assert(is_absolute_segmented()); return *static_cast(this); } inline seg_paddr_t& paddr_t::as_seg_paddr() { - assert(get_addr_type() == paddr_types_t::SEGMENT); + assert(is_absolute_segmented()); return *static_cast(this); } inline const blk_paddr_t& paddr_t::as_blk_paddr() const { - assert(get_addr_type() == paddr_types_t::RANDOM_BLOCK); + assert(is_absolute_random_block()); return *static_cast(this); } inline blk_paddr_t& paddr_t::as_blk_paddr() { - assert(get_addr_type() == paddr_types_t::RANDOM_BLOCK); + assert(is_absolute_random_block()); return *static_cast(this); } @@ -1009,18 +1009,15 @@ private: } using ret_t = std::pair; auto to_pair = [](const paddr_t &addr) -> ret_t { - if (addr.get_addr_type() == paddr_types_t::SEGMENT) { + if (addr.is_absolute_segmented()) { auto &seg_addr = addr.as_seg_paddr(); return ret_t(seg_addr.get_segment_off(), seg_addr.get_segment_id()); - } else if (addr.get_addr_type() == paddr_types_t::RANDOM_BLOCK) { + } else if (addr.is_absolute_random_block()) { auto &blk_addr = addr.as_blk_paddr(); return ret_t(blk_addr.get_device_off(), MAX_SEG_ID); - } else if (addr.get_addr_type() == paddr_types_t::RESERVED) { + } else { auto &res_addr = addr.as_res_paddr(); return ret_t(res_addr.get_device_off(), MAX_SEG_ID); - } else { - assert(0 == "impossible"); - return ret_t(0, MAX_SEG_ID); } }; auto left = to_pair(offset); diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index ac11813f31381..e7bf690c5e3d0 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -691,7 +691,7 @@ TransactionManager::get_extents_if_live( // This only works with segments to check if alive, // as parallel transactions may split the extent at the same time. - ceph_assert(paddr.get_addr_type() == paddr_types_t::SEGMENT); + ceph_assert(paddr.is_absolute_segmented()); return cache->get_extent_if_cached(t, paddr, len, type ).si_then([this, FNAME, type, paddr, laddr, len, &t](auto extent) @@ -727,7 +727,7 @@ TransactionManager::get_extents_if_live( { DEBUGT("got pin, try read in parallel ... -- {}", t, *pin); auto pin_paddr = pin->get_val(); - if (pin_paddr.get_addr_type() != paddr_types_t::SEGMENT) { + if (!pin_paddr.is_absolute_segmented()) { return seastar::now(); } auto &pin_seg_paddr = pin_paddr.as_seg_paddr(); -- 2.39.5