From: Liam R. Howlett Date: Thu, 10 Dec 2020 21:49:58 +0000 (-0500) Subject: Revert "maple_tree: Rework mas_mab_cp()" X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=406403e6e7f79f24e31690c14d2fb620d716ef59;p=users%2Fjedix%2Flinux-maple.git Revert "maple_tree: Rework mas_mab_cp()" This reverts commit 29e569389983582d6b6a007ca26d8eb568785648. --- diff --git a/lib/maple_tree.c b/lib/maple_tree.c index f29804815973..cddcc0eae552 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -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);