From: Liam R. Howlett Date: Fri, 2 May 2025 19:26:06 +0000 (-0400) Subject: ditch mni_insert_part, dst_max_off, unfinished, and use src->offset X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=a43e9bbc033d207bbb65d2d0c789ebd038c23ecb;p=users%2Fjedix%2Flinux-maple.git ditch mni_insert_part, dst_max_off, unfinished, and use src->offset Signed-off-by: Liam R. Howlett --- diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 574f95590ca8..14d3f5ed23af 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -3109,11 +3109,9 @@ done: struct ma_node_part { unsigned char size; unsigned char pos; - unsigned char dst_max_off; unsigned long pivots[3]; void *slots[3]; unsigned long gaps[2]; - //bool unfinished; unsigned char skip; bool leaf; }; @@ -3174,8 +3172,6 @@ void mns_node_part_leaf_init(struct ma_node_part *part, part->size++; } - //part->unfinished = false; - part->dst_max_off = 255; part->skip = wr_mas->offset_end - wr_mas->mas->offset + 1; part->leaf = true; } @@ -3198,51 +3194,10 @@ void mni_node_part_init(struct ma_node_part *part, } part->pos = 0; - //part->unfinished = false; - part->dst_max_off = 255; part->skip = 1; part->leaf = false; } -#if 0 -static __always_inline -void mni_insert_part(struct ma_node_part *part, - struct ma_node_info *dst) -{ - while (dst->offset < mt_slots[dst->type]) { - dst->slots[dst->offset] = part->slots[part->pos]; - if (dst->gaps) - dst->gaps[dst->offset] = part->gaps[part->pos]; - - if (!ma_is_leaf(dst->type)) - mte_set_parent(part->slots[part->pos], - dst->enode, dst->offset); - - if (dst->offset < mt_pivots[dst->type]) - dst->pivots[dst->offset] = part->pivots[part->pos]; - - dst->offset++; - dst->max = part->pivots[part->pos]; - part->pos++; - if (part->pos >= part->size) { - part->unfinished = false; - return; /* Nothing to do */ - } - - if (dst->offset > part->dst_max_off) { - /* push to next node */ - part->unfinished = true; - return; - } - - } - - /* Out of room.. */ - //WARN_ON_ONCE(1); - part->unfinished = true; -} -#endif - static inline void _mni_node_init(struct ma_node_info *mni, struct maple_node *node, enum maple_type type) @@ -3711,7 +3666,7 @@ static inline void mas_wr_converged(struct ma_node_info *src, static int state_setup(struct ma_node_state *state, struct ma_node_info *src, struct ma_node_info *dst, struct ma_node_part *part, - struct split_data *sd, int node_off) + struct split_data *sd) { unsigned char copied; unsigned char inc_off; @@ -3735,14 +3690,15 @@ static int state_setup(struct ma_node_state *state, struct ma_node_info *src, */ copied = min(sd->space, sd->insert - sd->offset); } else { - copied = min(sd->space, (src->end - node_off + 1)); + copied = min(sd->space, (src->end - src->offset + 1)); } BUG_ON(copied == 0); - mns_mni_init(state, dst, node_off, copied); + mns_mni_init(state, dst, src->offset, copied); inc_off = copied; } sd->offset += copied; + src->offset += copied; sd->space -= copied; printk("offset %u split %u\n", sd->offset, sd->split); return inc_off; @@ -3789,11 +3745,10 @@ static void mt_wr_split_data(struct ma_node_info *src, /* Offset into the destination data where the insert ends */ sd->insert_end = sd->insert + part->size - 1; to = left; - node_off = 0; /* src */ do { /* Configure one state */ state = &sd->states[sd->len]; - node_off += state_setup(state, src, to, part, sd, node_off); + state_setup(state, src, to, part, sd); /* * Potentially remove one entry from the state if it's NULL and @@ -3808,7 +3763,7 @@ static void mt_wr_split_data(struct ma_node_info *src, sd->split++; sd->offset++; sd->space--; - node_off++; + src->offset++; } else { sd->split--; sd->offset--; @@ -3816,7 +3771,7 @@ static void mt_wr_split_data(struct ma_node_info *src, if (state->use_part) { part->pos--; } else { - node_off--; + src->offset--; } if (state->size == 1) sd->len--; @@ -3829,8 +3784,8 @@ static void mt_wr_split_data(struct ma_node_info *src, sd->split = 255; } sd->len++; - printk("node off %u src end %u\n", node_off, src->end); - } while (node_off <= src->end); + printk("node off %u src end %u\n", src->offset, src->end); + } while (src->offset <= src->end); }