]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mas_wr_split using mt_wr_split_data
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Thu, 27 Feb 2025 03:02:30 +0000 (22:02 -0500)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Thu, 27 Feb 2025 03:02:30 +0000 (22:02 -0500)
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
lib/maple_tree.c

index d1f6dcb2b49d5d9104286bcd98c0d77371a3b4c8..fe5947a66b26af4623ac4ebc10ebe07a54ee4890 100644 (file)
@@ -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;