[PATCH 2/5] maple_tree: Avoid ascending when mas->min is also the parent's minimum
Liam R. Howlett
Liam.Howlett at Oracle.com
Fri Nov 10 06:54:02 PST 2023
* Peng Zhang <zhangpeng.00 at bytedance.com> [231109 07:43]:
> 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.
Nice!
Makes me think it might be worth checking if offset == the node end as
well. I've held off finding the node end in mas_ascend() because it
wasn't necessary and not all callers need the node end, but maybe we
should.
>
> Signed-off-by: Peng Zhang <zhangpeng.00 at bytedance.com>
Reviewed-by: Liam R. Howlett <Liam.Howlett at oracle.com>
> ---
> lib/maple_tree.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/lib/maple_tree.c b/lib/maple_tree.c
> index 1dfbcb74787a..61832b9e68e6 100644
> --- a/lib/maple_tree.c
> +++ b/lib/maple_tree.c
> @@ -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);
> --
> 2.20.1
>
More information about the maple-tree
mailing list