]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
maple_tree: inline mas_spanning_rebalance() into mas_wr_spanning_rebalance()
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Tue, 19 Aug 2025 14:11:39 +0000 (10:11 -0400)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Thu, 2 Oct 2025 17:36:30 +0000 (13:36 -0400)
Copy the contents of mas_spanning_rebalance() into
mas_wr_spanning_rebalance(), in preparation of removing initial big node
use.

No functional changes intended.

Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
lib/maple_tree.c

index 07c7a890db625125f351331787c552d1ca26a6f8..dd8e8f8884212404044e19fe2c47d960bdd23a7c 100644 (file)
@@ -2972,6 +2972,9 @@ static noinline void mas_wr_spanning_rebalance(struct ma_state *mas,
                struct ma_wr_state *l_wr_mas)
 {
        struct maple_big_node b_node;
+       MA_STATE(l_mas, mas->tree, mas->index, mas->index);
+       MA_STATE(r_mas, mas->tree, mas->index, mas->last);
+       MA_STATE(m_mas, mas->tree, mas->index, mas->index);
 
        memset(&b_node, 0, sizeof(struct maple_big_node));
        /* Copy l_mas and store the value in b_node. */
@@ -2988,7 +2991,22 @@ static noinline void mas_wr_spanning_rebalance(struct ma_state *mas,
 
        mast->bn = &b_node;
        /* Combine l_mas and r_mas and split them up evenly again. */
-       return mas_spanning_rebalance(mas, mast, height);
+
+       /*
+        * The tree needs to be rebalanced and leaves need to be kept at the same level.
+        * Rebalancing is done by use of the ``struct maple_topiary``.
+        */
+       mast->l = &l_mas;
+       mast->m = &m_mas;
+       mast->r = &r_mas;
+       l_mas.status = r_mas.status = m_mas.status = ma_none;
+
+       /* Check if this is not root and has sufficient data.  */
+       if (((mast->orig_l->min != 0) || (mast->orig_r->max != ULONG_MAX)) &&
+           unlikely(mast->bn->b_end <= mt_min_slots[mast->bn->type]))
+               mast_spanning_rebalance(mast);
+
+       mas_spanning_rebalance_loop(mas, mast, height);
 }
 /*
  * mas_rebalance() - Rebalance a given node.