From: Xuehan Xu Date: Sat, 13 Jun 2026 10:25:51 +0000 (+0800) Subject: crimson/os/seastore/lba: don't update the lba mapping if its child is an X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5d52c075903dc0792ce97e20985d299c964aad40;p=ceph.git crimson/os/seastore/lba: don't update the lba mapping if its child is an initial pending one. Because initial pending extents' paddrs are considered newer. Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/os/seastore/lba/btree_lba_manager.cc b/src/crimson/os/seastore/lba/btree_lba_manager.cc index 6fa10fcd948..1558802eb71 100644 --- a/src/crimson/os/seastore/lba/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba/btree_lba_manager.cc @@ -1154,6 +1154,14 @@ void BtreeLBAManager::update_paddr_sync( auto btree = get_btree_sync(c); auto iter = btree.lower_bound_sync(c, laddr); assert(iter.get_leaf_node()->is_pending()); + auto child = iter.get_leaf_node()->get_child_sync( + c.trans, c.cache, iter.get_leaf_pos(), iter.get_key()); + ceph_assert(child); + if (child->is_initial_pending()) { + TRACET("{} is initial_pending, skipping", t, *child); + return; + } + ceph_assert(child->is_exist_clean()); auto cursor = iter.get_cursor(c); assert(cursor->get_laddr() == laddr); btree.update(