From f9897a2b098e65f9559b486560042cd8c6fd52fc Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Fri, 23 May 2025 14:56:33 -0400 Subject: [PATCH] fix mni from part gaps Signed-off-by: Liam R. Howlett --- lib/maple_tree.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 5c0986d0f52a..46e110a7083e 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -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); } -- 2.50.1