From: Liam R. Howlett Date: Fri, 23 May 2025 18:56:33 +0000 (-0400) Subject: fix mni from part gaps X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=f9897a2b098e65f9559b486560042cd8c6fd52fc;p=users%2Fjedix%2Flinux-maple.git fix mni from part gaps Signed-off-by: Liam R. Howlett --- 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); }