[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