summaryrefslogtreecommitdiffstats
path: root/lib/maple_tree.c
diff options
context:
space:
mode:
authorPeng Zhang <zhangpeng.00@bytedance.com>2023-07-11 05:54:42 +0200
committerAndrew Morton <akpm@linux-foundation.org>2023-08-18 19:12:22 +0200
commita489539e33c29b469bcd023a32c99078c2597c7c (patch)
treefc2e2652dea79180de335dbd54eec5a8a134004e /lib/maple_tree.c
parentmaple_tree: make mas_validate_limits() check root node and node limit (diff)
downloadlinux-a489539e33c29b469bcd023a32c99078c2597c7c.tar.xz
linux-a489539e33c29b469bcd023a32c99078c2597c7c.zip
maple_tree: update mt_validate()
Instead of using mas_first_entry() to find the leftmost leaf, use a simple loop instead. Remove an unneeded check for root node. To make the error message more accurate, check pivots first and then slots, because checking slots depend on the node limit pivot to break the loop. Link: https://lkml.kernel.org/r/20230711035444.526-7-zhangpeng.00@bytedance.com Signed-off-by: Peng Zhang <zhangpeng.00@bytedance.com> Tested-by: Geert Uytterhoeven <geert@linux-m68k.org> Reviewed-by: Liam R. Howlett <Liam.Howlett@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'lib/maple_tree.c')
-rw-r--r--lib/maple_tree.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/lib/maple_tree.c b/lib/maple_tree.c
index 31ac4f2c4426..e08ef44926c6 100644
--- a/lib/maple_tree.c
+++ b/lib/maple_tree.c
@@ -7244,21 +7244,20 @@ void mt_validate(struct maple_tree *mt)
if (!mas_searchable(&mas))
goto done;
- mas_first_entry(&mas, mas_mn(&mas), ULONG_MAX, mte_node_type(mas.node));
+ while (!mte_is_leaf(mas.node))
+ mas_descend(&mas);
+
while (!mas_is_none(&mas)) {
MAS_WARN_ON(&mas, mte_dead_node(mas.node));
- if (!mte_is_root(mas.node)) {
- end = mas_data_end(&mas);
- if (MAS_WARN_ON(&mas,
- (end < mt_min_slot_count(mas.node)) &&
- (mas.max != ULONG_MAX))) {
- pr_err("Invalid size %u of %p\n", end,
- mas_mn(&mas));
- }
+ end = mas_data_end(&mas);
+ if (MAS_WARN_ON(&mas, (end < mt_min_slot_count(mas.node)) &&
+ (mas.max != ULONG_MAX))) {
+ pr_err("Invalid size %u of %p\n", end, mas_mn(&mas));
}
+
mas_validate_parent_slot(&mas);
- mas_validate_child_slot(&mas);
mas_validate_limits(&mas);
+ mas_validate_child_slot(&mas);
if (mt_is_alloc(mt))
mas_validate_gaps(&mas);
mas_dfs_postorder(&mas, ULONG_MAX);