From 8dd1d24e92b87a01b6fff829d67ab7843586e064 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Thu, 4 Aug 2022 22:09:03 +0800 Subject: [PATCH] crimson/os/seastore: cleanup, call paddr_t's explicit function where possible Signed-off-by: Yingxin Cheng --- .../seastore/backref/btree_backref_manager.cc | 2 +- .../os/seastore/btree/fixed_kv_btree.h | 3 ++- src/crimson/os/seastore/btree/fixed_kv_node.h | 2 +- src/crimson/os/seastore/cached_extent.h | 2 +- .../lba_manager/btree/lba_btree_node.h | 2 +- src/crimson/os/seastore/seastore_types.h | 21 ++++++++----------- 6 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/crimson/os/seastore/backref/btree_backref_manager.cc b/src/crimson/os/seastore/backref/btree_backref_manager.cc index baafbb781f2..ee1859cbcbb 100644 --- a/src/crimson/os/seastore/backref/btree_backref_manager.cc +++ b/src/crimson/os/seastore/backref/btree_backref_manager.cc @@ -104,7 +104,7 @@ BtreeBackrefManager::get_mappings( } TRACET("{}~{} got {}, {}, repeat ...", c.trans, offset, end, pos.get_key(), pos.get_val()); - ceph_assert((pos.get_key() + pos.get_val().len) > offset); + ceph_assert((pos.get_key().add_offset(pos.get_val().len)) > offset); ret.push_back(pos.get_pin()); return BackrefBtree::iterate_repeat_ret_inner( interruptible::ready_future_marker{}, diff --git a/src/crimson/os/seastore/btree/fixed_kv_btree.h b/src/crimson/os/seastore/btree/fixed_kv_btree.h index 3c514adaa99..860703a9c3a 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_btree.h +++ b/src/crimson/os/seastore/btree/fixed_kv_btree.h @@ -836,7 +836,8 @@ public: * against the real final address. */ n_fixed_kv_extent->resolve_relative_addrs( - make_record_relative_paddr(0) - n_fixed_kv_extent->get_paddr()); + make_record_relative_paddr(0).block_relative_to( + n_fixed_kv_extent->get_paddr())); SUBTRACET( seastore_fixedkv_tree, diff --git a/src/crimson/os/seastore/btree/fixed_kv_node.h b/src/crimson/os/seastore/btree/fixed_kv_node.h index 5673de2512f..f193509f50e 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_node.h +++ b/src/crimson/os/seastore/btree/fixed_kv_node.h @@ -243,7 +243,7 @@ struct FixedKVInternalNode for (auto i = from; i != to; ++i) { if (i->get_val().is_relative()) { assert(i->get_val().is_record_relative()); - i->set_val(i->get_val() - this->get_paddr()); + i->set_val(i->get_val().block_relative_to(this->get_paddr())); } } } diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index ff3f66d877b..115d518e36f 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -549,7 +549,7 @@ protected: */ paddr_t maybe_generate_relative(paddr_t addr) { if (is_initial_pending() && addr.is_record_relative()) { - return addr - get_paddr(); + return addr.block_relative_to(get_paddr()); } else { ceph_assert(!addr.is_record_relative() || is_mutation_pending()); return addr; diff --git a/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h b/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h index f8fc2bff32b..060163b6c32 100644 --- a/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h +++ b/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h @@ -201,7 +201,7 @@ struct LBALeafNode if (val.paddr.is_relative()) { auto val = i->get_val(); assert(val.paddr.is_record_relative()); - val.paddr = val.paddr - get_paddr(); + val.paddr = val.paddr.block_relative_to(get_paddr()); i->set_val(val); } } diff --git a/src/crimson/os/seastore/seastore_types.h b/src/crimson/os/seastore/seastore_types.h index bd6e35fc566..e305ac533bb 100644 --- a/src/crimson/os/seastore/seastore_types.h +++ b/src/crimson/os/seastore/seastore_types.h @@ -539,13 +539,14 @@ public: } /** - * operator- + * block_relative_to * * Only defined for record_relative paddr_ts. Yields a * block_relative address. */ - paddr_t operator-(paddr_t rhs) const; + paddr_t block_relative_to(paddr_t rhs) const; + // To be compatible with laddr_t operator+ paddr_t operator+(seastore_off_t o) const { return add_offset(o); } @@ -716,12 +717,10 @@ struct res_paddr_t : public paddr_t { return paddr_t::make_res_paddr(get_device_id(), off); } - paddr_t operator-(paddr_t rhs) const { - assert(rhs.is_relative() && is_relative()); - assert(rhs.get_device_id() == get_device_id()); - auto &r = rhs.as_res_paddr(); - auto off = get_seastore_off() - r.get_seastore_off(); - assert(r.get_seastore_off() >= 0 ? + paddr_t block_relative_to(const res_paddr_t &rhs) const { + assert(rhs.is_record_relative() && is_record_relative()); + auto off = get_seastore_off() - rhs.get_seastore_off(); + assert(rhs.get_seastore_off() >= 0 ? off <= get_seastore_off() : off > get_seastore_off()); return paddr_t::make_res_paddr(DEVICE_ID_BLOCK_RELATIVE, off); } @@ -811,10 +810,8 @@ inline paddr_t paddr_t::add_relative(paddr_t o) const { return add_offset(res_o.get_seastore_off()); } -inline paddr_t paddr_t::operator-(paddr_t rhs) const { - PADDR_OPERATION(paddr_types_t::RESERVED, res_paddr_t, operator-(rhs)) - ceph_assert(0 == "not supported type"); - return P_ADDR_NULL; +inline paddr_t paddr_t::block_relative_to(paddr_t rhs) const { + return as_res_paddr().block_relative_to(rhs.as_res_paddr()); } struct __attribute((packed)) paddr_le_t { -- 2.39.5