]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/lba_manager: check depth when load lba node
authorYingxin Cheng <yingxin.cheng@intel.com>
Mon, 30 Aug 2021 07:37:16 +0000 (15:37 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Mon, 30 Aug 2021 08:06:25 +0000 (16:06 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/lba_manager/btree/lba_btree.cc

index e350f437e7ab5fef1671da0cdae5b2d9df102978..a9ce38eb93e5c03c3ff5d56b0a0a5a81cc827836 100644 (file)
@@ -398,29 +398,31 @@ LBABtree::get_internal_node_ret LBABtree::get_internal_node(
     c.trans,
     offset,
     depth);
-    return c.cache.get_extent<LBAInternalNode>(
+  assert(depth > 1);
+  return c.cache.get_extent<LBAInternalNode>(
+    c.trans,
+    offset,
+    LBA_BLOCK_SIZE
+  ).si_then([FNAME, c, offset, depth](LBAInternalNodeRef ret) {
+    DEBUGT(
+      "read internal at offset {} {}",
       c.trans,
       offset,
-      LBA_BLOCK_SIZE
-    ).si_then([FNAME, c, offset](LBAInternalNodeRef ret) {
-      DEBUGT(
-       "read internal at offset {} {}",
-       c.trans,
-       offset,
-       *ret);
-      auto meta = ret->get_meta();
-      if (ret->get_size()) {
-       ceph_assert(meta.begin <= ret->begin()->get_key());
-       ceph_assert(meta.end > (ret->end() - 1)->get_key());
-      }
-      if (!ret->is_pending() && !ret->pin.is_linked()) {
-       ret->pin.set_range(meta);
-       c.pins.add_pin(ret->pin);
-      }
-      return get_internal_node_ret(
-       interruptible::ready_future_marker{},
-       ret);
-    });
+      *ret);
+    auto meta = ret->get_meta();
+    if (ret->get_size()) {
+      ceph_assert(meta.begin <= ret->begin()->get_key());
+      ceph_assert(meta.end > (ret->end() - 1)->get_key());
+    }
+    ceph_assert(depth == meta.depth);
+    if (!ret->is_pending() && !ret->pin.is_linked()) {
+      ret->pin.set_range(meta);
+      c.pins.add_pin(ret->pin);
+    }
+    return get_internal_node_ret(
+      interruptible::ready_future_marker{},
+      ret);
+  });
 }
 
 LBABtree::get_leaf_node_ret LBABtree::get_leaf_node(
@@ -447,6 +449,7 @@ LBABtree::get_leaf_node_ret LBABtree::get_leaf_node(
       ceph_assert(meta.begin <= ret->begin()->get_key());
       ceph_assert(meta.end > (ret->end() - 1)->get_key());
     }
+    ceph_assert(1 == meta.depth);
     if (!ret->is_pending() && !ret->pin.is_linked()) {
       ret->pin.set_range(meta);
       c.pins.add_pin(ret->pin);