From: Yingxin Cheng Date: Wed, 2 Apr 2025 03:49:41 +0000 (+0800) Subject: crimson/os/seastore/../btree_lba_manager: nextent should be valid iff unlinked yet X-Git-Tag: v20.3.0~129^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=027be57f28b83c2230eb62b9b4beedd7a2dff907;p=ceph.git crimson/os/seastore/../btree_lba_manager: nextent should be valid iff unlinked yet Clarify the facts. Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc index cc56775c4168..0062d8efc8dc 100644 --- a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc @@ -875,6 +875,7 @@ BtreeLBAManager::_update_mapping( auto ret = f(iter.get_val()); if (ret.refcount == 0) { + assert(nextent == nullptr); return btree.remove( c, iter @@ -890,15 +891,16 @@ BtreeLBAManager::_update_mapping( iter, ret ).si_then([c, ret, nextent](auto iter) { - // child-ptr may already be correct, - // see LBAManager::update_mappings() - if (nextent && !nextent->has_parent_tracker()) { + if (nextent) { + // nextent is provided iff unlinked, + // also see TM::rewrite_logical_extent() + assert(!nextent->has_parent_tracker()); iter.get_leaf_node()->update_child_ptr( iter.get_leaf_pos(), nextent); } assert(!nextent || - (nextent->has_parent_tracker() - && nextent->get_parent_node().get() == iter.get_leaf_node().get())); + (nextent->has_parent_tracker() && + nextent->get_parent_node().get() == iter.get_leaf_node().get())); return update_mapping_ret_bare_t{ std::move(ret), iter.get_pin(c)