From: Liam R. Howlett Date: Thu, 27 Feb 2025 03:02:30 +0000 (-0500) Subject: mas_wr_split using mt_wr_split_data X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=2ff471d3048df3e41ff058aadc344e908c26f6b9;p=users%2Fjedix%2Flinux-maple.git mas_wr_split using mt_wr_split_data Signed-off-by: Liam R. Howlett --- diff --git a/lib/maple_tree.c b/lib/maple_tree.c index d1f6dcb2b49d..fe5947a66b26 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -3183,7 +3183,7 @@ void mns_node_part_leaf_init(struct ma_node_part *ma_part, ma_part->pivots[ma_part->size] = wr_mas->end_piv; ma_part->slots[ma_part->size] = src->slots[wr_mas->offset_end]; ma_part->size++; - printk("r_max remains\n"); + printk("r_max remains as %lx\n", wr_mas->end_piv); } ma_part->unfinished = false; @@ -3987,8 +3987,8 @@ static int mt_wr_split_data(struct ma_node_info *src, printk("A: min of %u and %u (%u - %u)\n", size, insert - offset, insert, offset); copied = min(size, insert - offset); } else { - printk("C: min of %u and %u\n", size, total_data - offset +1 ); - copied = min(size, src->end - node_off + 1); + printk("C: min of %u and %u\n", size, src->end - node_off + 1); + copied = min(size, (src->end - node_off + 1)); } printk("size is %u split %u\n", size, split); @@ -4111,6 +4111,8 @@ try_right: } /* The rebalance operation will succeed. */ + printk("\t\t%s\n", __func__); + mt_dump(mas->tree, mt_dump_hex); i = 0; offset = 0; @@ -4531,7 +4533,7 @@ static void mas_wr_split(struct ma_wr_state *wr_mas) mni_node_init(&right, mas_pop_node(mas), wr_mas->type); mns_mas_init(&src, &src_info, mas); mns_node_part_leaf_init(&ma_part, wr_mas, &src_info); - total = mas->end + ma_part.size - 1; + total = mas->end + ma_part.size; if (mt_is_alloc(mas->tree)) { right.alloc = left.alloc = true; @@ -4543,10 +4545,15 @@ static void mas_wr_split(struct ma_wr_state *wr_mas) goto rebalanced; split = (total + 1) / 2; - printk("Splitting leaf at %u store at %u\n", split, mas->offset); + printk("\t\tSplitting leaf at %u store at %u\n", split, mas->offset); left.min = mas->min; right.max = mas->max; -#if 1 + + mt_dump(wr_mas->mas->tree, mt_dump_hex); + i = mt_wr_split_data(&src_info, &left, &right, &ma_part, split, + mas->offset, split, 0, wr_mas->offset_end, + total, state, 0); +#if 0 if (split >= mas->offset) { unsigned char space;