From d58addbc0b02243db767dbbcbf4881664c1f136f Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Wed, 9 Sep 2020 12:01:37 -0400 Subject: [PATCH] maple_tree: rework mas_prev_node loop Signed-off-by: Liam R. Howlett --- lib/maple_tree.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) 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: -- 2.50.1