maple_tree: avoid ascending when mas->min is also the parent's minimum
authorPeng Zhang <zhangpeng.00@bytedance.com>
Mon, 20 Nov 2023 07:09:34 +0000 (15:09 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 12 Dec 2023 18:57:00 +0000 (10:57 -0800)
When the child node is the first child of its parent node, mas->min does
not need to be updated. This can reduce the number of ascending times
in some cases.

Link: https://lkml.kernel.org/r/20231120070937.35481-3-zhangpeng.00@bytedance.com
Signed-off-by: Peng Zhang <zhangpeng.00@bytedance.com>
Reviewed-by: Liam R. Howlett <Liam.Howlett@oracle.com>
Cc: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
lib/maple_tree.c

index df3ae393f12ac25c6d40c3816768437873daf18f..e26bc4473eb735945a6202ad779c90ca13d4d0e8 100644 (file)
@@ -1088,14 +1088,16 @@ static int mas_ascend(struct ma_state *mas)
                return 0;
        }
 
-       if (!mas->min)
+       min = 0;
+       max = ULONG_MAX;
+       if (!mas->offset) {
+               min = mas->min;
                set_min = true;
+       }
 
        if (mas->max == ULONG_MAX)
                set_max = true;
 
-       min = 0;
-       max = ULONG_MAX;
        do {
                p_enode = a_enode;
                a_type = mas_parent_type(mas, p_enode);