]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
maple_tree: rework mas_prev_node loop
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Wed, 9 Sep 2020 16:01:37 +0000 (12:01 -0400)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Fri, 30 Oct 2020 19:11:28 +0000 (15:11 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
lib/maple_tree.c

index 5066e5460471054d5010da878a5a4578c4165fd1..f5ef8324e939591f3a8926ea9233ffd99ab38cfb 100644 (file)
@@ -3166,11 +3166,14 @@ static inline void mas_prev_node(struct ma_state *mas, unsigned long limit)
        start_piv = mas_safe_pivot(mas, offset);
 restart_prev_node:
        level = 0;
-       if (mte_is_root(mas->node) || mas->node == MAS_NONE)
+       if (mas->node == MAS_NONE)
                goto no_entry;
 
        while (1) {
 
+               if (mte_is_root(mas->node))
+                       goto no_entry;
+
                offset = mte_parent_slot(mas->node);
                mas_ascend(mas);
                level++;
@@ -3179,7 +3182,7 @@ restart_prev_node:
                        goto restart_prev_node;
 
                if (!offset)
-                       goto ascend;
+                       continue;
 
                offset--;
                slots = ma_get_slots(mas_mn(mas), mte_node_type(mas->node));
@@ -3190,7 +3193,7 @@ restart_prev_node:
                        if (pivot < limit)
                                goto no_entry;
 
-                       if (offset != 0 && pivot == 0)
+                       if (!pivot && offset) // end of node.
                                break;
 
                        mn = rcu_dereference_check(slots[offset],
@@ -3216,10 +3219,6 @@ restart_prev_node:
                        slots = ma_get_slots(mas_mn(mas),
                                             mte_node_type(mas->node));
                } while (offset-- > 0);
-
-ascend:
-               if (mte_is_root(mas->node))
-                       goto no_entry;
        }
 
 no_entry: