]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/../btree_lba_manager: nextent should be valid iff unlinked yet
authorYingxin Cheng <yingxin.cheng@intel.com>
Wed, 2 Apr 2025 03:49:41 +0000 (11:49 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Thu, 3 Apr 2025 02:20:35 +0000 (10:20 +0800)
Clarify the facts.

Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc

index cc56775c416857dbd59b368a93a31efdf8b85b6f..0062d8efc8dccaa3e17cc83b2e2c4e8f46e1d1a4 100644 (file)
@@ -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)