]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
fix mni from part gaps
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Fri, 23 May 2025 18:56:33 +0000 (14:56 -0400)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Fri, 23 May 2025 18:56:33 +0000 (14:56 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
lib/maple_tree.c

index 5c0986d0f52a1de1cdf0b332e8ac88568d8816da..46e110a7083e6384378095d08cbc8a0db2f6d56a 100644 (file)
@@ -3201,8 +3201,10 @@ void init_mni_from_part(struct ma_node_info *info, struct ma_node_part *part,
                info->new = true;
        info->end = part->size - 1;
        info->max = part->pivots[info->end];
+       info->min = min;
        info->pivots = part->pivots;
        info->slots = part->slots;
+#if 0
        if (is_alloc && ma_is_leaf(info->type)) {
                for(int i = 0; i < part->size; i++) {
                        if (!part->slots[i])
@@ -3210,6 +3212,7 @@ void init_mni_from_part(struct ma_node_info *info, struct ma_node_part *part,
                        min = part->pivots[i];
                }
        }
+#endif
        info->gaps = part->gaps;
 }
 
@@ -3411,7 +3414,7 @@ void mni_finalise(struct ma_node_info *p, struct split_data *sd)
                void **slots;
 
                if (!sd->is_alloc)
-                       goto finalise_leaf;
+                       goto set_metadata;
                i = 0;
                offset = p->offset - 2;
                /*
@@ -3437,7 +3440,6 @@ void mni_finalise(struct ma_node_info *p, struct split_data *sd)
                        i = 1;
                }
 
-
                for (; i <= offset; i++) {
                        /* data == no gap. */
                        if (slots[i])
@@ -3445,14 +3447,19 @@ void mni_finalise(struct ma_node_info *p, struct split_data *sd)
 
                        pstart = pivs[i - 1];
                        gap = pivs[i] - pstart;
+                       printk("gap of %u is %lu ", i, gap);
                        if (gap > max_gap)
                                max_gap = gap;
 
+                       printk("max gap is %lu\n", max_gap);
+
                        /* There cannot be two gaps in a row. */
                        i++;
                }
 finalise_leaf:
                p->max_gap = max_gap;
+               printk("max_gap for %p is %lu\n", p->node, p->max_gap);
+set_metadata:
                if (p->offset <= mt_pivots[p->type]) {
                        ma_set_meta(p->node, p->type, 0, p->offset - 1);
                }