* Sidhartha Kumar <sidhartha.kumar@xxxxxxxxxx> [250221 11:36]: > This allows support for using the vacant height to calculate the worst > case number of nodes needed for wr_rebalance operation. > mas_spanning_rebalance() was seen to perform unnecessary node allocations. > We can reduce allocations by breaking early during the rebalancing loop > once we realize that we have ascended to a common ancestor. > > Suggested-by: Liam Howlett <liam.howlett@xxxxxxxxxx> > Reviewed-by: Wei Yang <richard.weiyang@xxxxxxxxx> > Signed-off-by: Sidhartha Kumar <sidhartha.kumar@xxxxxxxxxx> Reviewed-by: Liam R. Howlett <Liam.Howlett@xxxxxxxxxx> > --- > lib/maple_tree.c | 19 ++++++++++++++++--- > 1 file changed, 16 insertions(+), 3 deletions(-) > > diff --git a/lib/maple_tree.c b/lib/maple_tree.c > index ef71af0529f4..4de257003251 100644 > --- a/lib/maple_tree.c > +++ b/lib/maple_tree.c > @@ -2896,11 +2896,24 @@ static void mas_spanning_rebalance(struct ma_state *mas, > mast_combine_cp_right(mast); > mast->orig_l->last = mast->orig_l->max; > > - if (mast_sufficient(mast)) > - continue; > + if (mast_sufficient(mast)) { > + if (mast_overflow(mast)) > + continue; > + > + if (mast->orig_l->node == mast->orig_r->node) { > + /* > + * The data in b_node should be stored in one > + * node and in the tree > + */ > + slot = mast->l->offset; > + /* May be a new root stored in mast->bn */ > + if (mas_is_root_limits(mast->orig_l)) > + new_height++; > + break; > + } > > - if (mast_overflow(mast)) > continue; > + } > > /* May be a new root stored in mast->bn */ > if (mas_is_root_limits(mast->orig_l)) { > -- > 2.43.0 >