From d12e197957c1c0c3d9b871ac99afa07338868a1d Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Mon, 30 Aug 2021 15:37:16 +0800 Subject: [PATCH] crimson/os/seastore/lba_manager: check depth when load lba node Signed-off-by: Yingxin Cheng --- .../seastore/lba_manager/btree/lba_btree.cc | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/src/crimson/os/seastore/lba_manager/btree/lba_btree.cc b/src/crimson/os/seastore/lba_manager/btree/lba_btree.cc index e350f437e7a..a9ce38eb93e 100644 --- a/src/crimson/os/seastore/lba_manager/btree/lba_btree.cc +++ b/src/crimson/os/seastore/lba_manager/btree/lba_btree.cc @@ -398,29 +398,31 @@ LBABtree::get_internal_node_ret LBABtree::get_internal_node( c.trans, offset, depth); - return c.cache.get_extent( + assert(depth > 1); + return c.cache.get_extent( + 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); -- 2.39.5