]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mas_wr_rebalance reorg
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Tue, 6 May 2025 16:11:17 +0000 (12:11 -0400)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Tue, 6 May 2025 16:11:17 +0000 (12:11 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
lib/maple_tree.c

index 4ed6ebf8fde5f881c5dec6e8823339569460c329..9b7a952d91136ab256c84be522fedb8d7d8a1996 100644 (file)
@@ -4088,38 +4088,34 @@ static void mas_wr_rebalance(struct ma_wr_state *wr_mas)
                }
 
                sd.new_end += src2.end + 1;
+               mas_ascend(mas);
+               mas->end = parent.end;
+               mas->offset = parent.insert_off;
                if (sd.new_end >= mt_slots[left.type]) {
-                       mni_node_init(&right, mas_pop_node(mas), mte_node_type(mas->node));
+                       mni_node_init(&right, mas_pop_node(mas), left.type);
                        rebalance_two(&left, &right, &src, &src2, &part, &sd, left_store);
-                       mas_ascend(mas);
-                       mas->end = parent.end;
-                       mas->offset = parent.insert_off;
                        break;
                }
 
                rebalance_reduce(&left, &src, &src2, &part, &sd, left_store);
-               mas_ascend(mas);
-               mas->end = parent.end;
-               mas->offset = parent.insert_off;
                if (ma_is_root(parent.node)) {
                        if (parent.end != 1)
-                               break; /* Converged */
+                               break;
 
                        src.enode = mas->node;
                        left.node->parent = mas_mn(mas)->parent;
                        mas->node = left.enode;
                        mas->depth = mas_mt_height(mas) - 1;
-                       if (mas->depth == 1)
-
-                               mas_set_height(mas);
+                       mas_set_height(mas);
                        goto new_root;
                }
-               if (mas->end > mt_min_slots[parent.type])
-                       break; /* Converged */
 
-               /* Must go again */
-               sd.len = 0;
+
                sd.new_end = mas->end + part.size - part.skip + 1;
+               if (sd.new_end > mt_min_slots[parent.type])
+                       break;
+
+               sd.len = 0;
                sd.offset = mas->offset;
                sd.src_ins_end = mas->offset + 1;
                mni_mas_init(&src, mas);