From: Yingxin Cheng Date: Wed, 2 Jun 2021 06:07:33 +0000 (+0800) Subject: crimson/onode-staged-tree: check the maximum tree height X-Git-Tag: v17.1.0~1674^2~16 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=70ced70d04d7c7e4a46925aca90e4a9525568de1;p=ceph.git crimson/onode-staged-tree: check the maximum tree height Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/fwd.h b/src/crimson/os/seastore/onode_manager/staged-fltree/fwd.h index 2c08895320da6..41ac86bea7ec0 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/fwd.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/fwd.h @@ -52,6 +52,8 @@ using InternalNodeImplURef = std::unique_ptr; using NodeImplURef = std::unique_ptr; using level_t = uint8_t; +constexpr auto MAX_LEVEL = std::numeric_limits::max(); + // a type only to index within a node, 32 bits should be enough using index_t = uint32_t; constexpr auto INDEX_END = std::numeric_limits::max(); diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc b/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc index d0f35817f59d8..7f36e435cc9f2 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node.cc @@ -1176,6 +1176,8 @@ eagain_future> InternalNode::allocate_root( context_t c, level_t old_root_level, laddr_t old_root_addr, Super::URef&& super) { + // support tree height up to 256 + ceph_assert(old_root_level < MAX_LEVEL); return InternalNode::allocate(c, field_type_t::N0, true, old_root_level + 1 ).safe_then([c, old_root_addr, super = std::move(super)](auto fresh_node) mutable {