From: Liam R. Howlett Date: Tue, 6 May 2025 16:11:17 +0000 (-0400) Subject: mas_wr_rebalance reorg X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=ddbe2c284bcac35b63cd2f5f9bf4adbdbe7309e6;p=users%2Fjedix%2Flinux-maple.git mas_wr_rebalance reorg Signed-off-by: Liam R. Howlett --- diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 4ed6ebf8fde5..9b7a952d9113 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -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);