]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/lba: don't update the lba mapping if its child is an
authorXuehan Xu <xuxuehan@qianxin.com>
Sat, 13 Jun 2026 10:25:51 +0000 (18:25 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Thu, 18 Jun 2026 09:07:20 +0000 (17:07 +0800)
initial pending one.

Because initial pending extents' paddrs are considered newer.

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/os/seastore/lba/btree_lba_manager.cc

index 6fa10fcd948062870171ecdfaad4120c8d17f270..1558802eb71ebf538c3f923464fa6ccc7324fc6c 100644 (file)
@@ -1154,6 +1154,14 @@ void BtreeLBAManager::update_paddr_sync(
   auto btree = get_btree_sync<LBABtree>(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<LogicalChildNode>(
+    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(