From: Liam R. Howlett <Liam.Howlett@Oracle.com> Date: Wed, 9 Sep 2020 16:01:37 +0000 (-0400) Subject: maple_tree: rework mas_prev_node loop X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=3a03957d78ab45bc6d0c692ee0efb4ba0fefa57d;p=users%2Fjedix%2Flinux-maple.git maple_tree: rework mas_prev_node loop Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com> --- diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 5066e5460471..f5ef8324e939 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -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: