]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ditch mni_insert_part, dst_max_off, unfinished, and use src->offset
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Fri, 2 May 2025 19:26:06 +0000 (15:26 -0400)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Fri, 2 May 2025 19:26:06 +0000 (15:26 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
lib/maple_tree.c

index 574f95590ca841db33f6cfef53036e55fa5f2540..14d3f5ed23aff51a057231be9f1c7479bfa6f448 100644 (file)
@@ -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);
 }