]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Revert "maple_tree: Rework mas_mab_cp()"
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Thu, 10 Dec 2020 21:49:58 +0000 (16:49 -0500)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 5 Jan 2021 17:33:38 +0000 (12:33 -0500)
This reverts commit 29e569389983582d6b6a007ca26d8eb568785648.

lib/maple_tree.c

index f298048159737df25044dc54ce58733e94d9ff6c..cddcc0eae552b026045a54388593376f12106eba 100644 (file)
@@ -1553,39 +1553,29 @@ static inline void mas_mab_cp(struct ma_state *mas, unsigned char mas_start,
                        unsigned char mas_end, struct maple_big_node *b_node,
                        unsigned char mab_start)
 {
-       enum maple_type mt;
-       struct maple_node *node;
-       void **slots;
-       unsigned long *pivots, *gaps;
+       enum maple_type mt = mte_node_type(mas->node);
+       struct maple_node *node = mte_to_node(mas->node);
+       void **slots = ma_slots(node, mt);
+       unsigned long *pivots = ma_pivots(node, mt);
+       unsigned long *gaps = NULL;
        int i = mas_start, j = mab_start;
-       unsigned char piv_end;
 
-       node = mas_mn(mas);
-       mt = mte_node_type(mas->node);
-       pivots = ma_pivots(node, mt);
-       if (!i) {
-               b_node->pivot[j] = pivots[i++];
-               if (unlikely(i > mas_end))
-                       goto complete;
-               j++;
-       }
+       for (; i <= mas_end; i++, j++) {
+               b_node->pivot[j] = _mas_safe_pivot(mas, pivots, i, mt);
 
-       piv_end = min(mas_end, mt_pivots[mt]);
-       for (; i < piv_end; i++, j++) {
-               b_node->pivot[j] = pivots[i];
-               if (unlikely(mas->max == b_node->pivot[j] || !b_node->pivot[j]))
-                       goto complete;
+               if ((mas->max == b_node->pivot[j]) ||
+                   (j && !b_node->pivot[j])) {       // end of node.
+                       j++;
+                       break;
+               }
        }
 
-       if (likely(i <= mas_end))
-               b_node->pivot[j] = _mas_safe_pivot(mas, pivots, i, mt);
-
-complete:
-       b_node->b_end = ++j;
+       b_node->b_end = j;
        j -= mab_start;
-       slots = ma_slots(node, mt);
+
        memcpy(b_node->slot + mab_start, slots + mas_start, sizeof(void *) * j);
-       if (!ma_is_leaf(mt) && mt_is_alloc(mas->tree)) {
+
+       if (!mte_is_leaf(mas->node) && mt_is_alloc(mas->tree)) {
                gaps = ma_gaps(node, mt);
                memcpy(b_node->gap + mab_start, gaps + mas_start,
                       sizeof(unsigned long) * j);