mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 04:04:43 +01:00
maple_tree: break on convergence in mas_spanning_rebalance()
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. Link: https://lkml.kernel.org/r/20250410191446.2474640-5-sidhartha.kumar@oracle.com Signed-off-by: Sidhartha Kumar <sidhartha.kumar@oracle.com> Suggested-by: Liam Howlett <liam.howlett@oracle.com> Reviewed-by: Wei Yang <richard.weiyang@gmail.com> Reviewed-by: Liam R. Howlett <Liam.Howlett@Oracle.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
ad88fc17d2
commit
300a5b4ffe
1 changed files with 13 additions and 3 deletions
|
|
@ -2893,11 +2893,21 @@ 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;
|
||||
break;
|
||||
}
|
||||
|
||||
if (mast_overflow(mast))
|
||||
continue;
|
||||
}
|
||||
|
||||
/* May be a new root stored in mast->bn */
|
||||
if (mas_is_root_limits(mast->orig_l))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue