From: Xuehan Xu Date: Mon, 15 Jun 2026 02:43:36 +0000 (+0800) Subject: crimson/os/seastore/lba: don't update LBALeafNode::modifications when X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f08533c4877d30462d1c86e89486d7f6be9dced9;p=ceph.git crimson/os/seastore/lba: don't update LBALeafNode::modifications when updating the lba mapping for committing rewrite transactions Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/os/seastore/backref/backref_tree_node.h b/src/crimson/os/seastore/backref/backref_tree_node.h index d8d5961a9ad..8af8afaebe0 100644 --- a/src/crimson/os/seastore/backref/backref_tree_node.h +++ b/src/crimson/os/seastore/backref/backref_tree_node.h @@ -105,7 +105,8 @@ public: void update( const_iterator iter, - backref_map_val_t val) final { + backref_map_val_t val, + modification_t) final { return journal_update( iter, val, diff --git a/src/crimson/os/seastore/btree/fixed_kv_btree.h b/src/crimson/os/seastore/btree/fixed_kv_btree.h index b701062610a..fdfa31230ab 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_btree.h +++ b/src/crimson/os/seastore/btree/fixed_kv_btree.h @@ -20,6 +20,16 @@ namespace crimson::os::seastore { +enum modification_t { + USER_MODIFY, // logical update (affects node state) + TRANS_SYNC // synchronization-only update (should NOT count + // as modification and should avoid on_modify(), + // for example, BtreeLBAManager::update_paddr_sync + // does not change the logical mapping, only the + // physical location (paddr) of the same data, so + // TRANS_SYNC is used. +}; + template phy_tree_root_t& get_phy_tree_root(root_t& r); @@ -1108,7 +1118,8 @@ public: op_context_t c, iterator iter, node_val_t val, - BaseChildNode *child) + BaseChildNode *child, + modification_t mod = modification_t::USER_MODIFY) { LOG_PREFIX(FixedKVBtree::update); SUBTRACET( @@ -1116,6 +1127,9 @@ public: "update element at {}", c.trans, iter.is_end() ? min_max_t::max : iter.get_key()); + if (mod == modification_t::TRANS_SYNC) { + assert(child == nullptr); + } if (!iter.leaf.node->is_mutable()) { CachedExtentRef mut = c.cache.duplicate_for_write( c.trans, iter.leaf.node @@ -1125,7 +1139,8 @@ public: ++(get_tree_stats(c.trans).num_updates); iter.leaf.node->update( iter.leaf.node->iter_idx(iter.leaf.pos), - val); + val, + mod); if constexpr (std::is_base_of_v< ParentNode, leaf_node_t>) { if (child) { diff --git a/src/crimson/os/seastore/btree/fixed_kv_node.h b/src/crimson/os/seastore/btree/fixed_kv_node.h index 74e5d47af7b..24475157938 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_node.h +++ b/src/crimson/os/seastore/btree/fixed_kv_node.h @@ -729,7 +729,8 @@ struct FixedKVLeafNode virtual void update( internal_const_iterator_t iter, - VAL val) = 0; + VAL val, + modification_t mod) = 0; virtual internal_const_iterator_t insert( internal_const_iterator_t iter, NODE_KEY addr, diff --git a/src/crimson/os/seastore/lba/btree_lba_manager.cc b/src/crimson/os/seastore/lba/btree_lba_manager.cc index 1558802eb71..124aa1a4da2 100644 --- a/src/crimson/os/seastore/lba/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba/btree_lba_manager.cc @@ -1173,7 +1173,8 @@ void BtreeLBAManager::update_paddr_sync( cursor->get_refcount(), cursor->get_checksum(), cursor->get_extent_type()}, - nullptr); + nullptr, + modification_t::TRANS_SYNC); } BtreeLBAManager::move_mapping_ret diff --git a/src/crimson/os/seastore/lba/lba_btree_node.cc b/src/crimson/os/seastore/lba/lba_btree_node.cc index ed94290f72a..1e819b032e5 100644 --- a/src/crimson/os/seastore/lba/lba_btree_node.cc +++ b/src/crimson/os/seastore/lba/lba_btree_node.cc @@ -46,13 +46,16 @@ void LBALeafNode::resolve_relative_addrs(paddr_t base) void LBALeafNode::update( internal_const_iterator_t iter, - lba_map_val_t val) + lba_map_val_t val, + modification_t mod) { LOG_PREFIX(LBALeafNode::update); SUBTRACE(seastore_fixedkv_tree, "trans.{}, pos {}", this->pending_for_transaction, iter.get_offset()); - this->on_modify(); + if (likely(mod == modification_t::USER_MODIFY)) { + this->on_modify(); + } if (val.pladdr.is_paddr()) { val.pladdr = maybe_generate_relative(val.pladdr.get_paddr()); } diff --git a/src/crimson/os/seastore/lba/lba_btree_node.h b/src/crimson/os/seastore/lba/lba_btree_node.h index cabb652bebf..92e2c333a53 100644 --- a/src/crimson/os/seastore/lba/lba_btree_node.h +++ b/src/crimson/os/seastore/lba/lba_btree_node.h @@ -141,7 +141,8 @@ struct LBALeafNode void update( internal_const_iterator_t iter, - lba_map_val_t val) final; + lba_map_val_t val, + modification_t mod) final; internal_const_iterator_t insert( internal_const_iterator_t iter,