From 87923e49a33f0dd8bee7c2ef085e4cf2437b098f Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Tue, 6 Jul 2021 13:58:13 -0400 Subject: [PATCH] maple_tree: Rework mas_first_entry() to remove unnecessary temps Signed-off-by: Liam R. Howlett --- lib/maple_tree.c | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 50e32a7498c7..cc70ef6c606e 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -4475,17 +4475,15 @@ static inline void *mas_first_entry(struct ma_state *mas, unsigned long limit, unsigned long *r_start) { unsigned long max; - unsigned long range_start; - unsigned char offset; unsigned long *pivots; struct maple_node *mn; void __rcu **slots; enum maple_type mt; void *entry = NULL; - range_start = mas->min; + *r_start = mas->min; max = mas->max; -restart: + mas->offset = 0; while (likely(!mte_is_leaf(mas->node))) { mn = mas_mn(mas); mt = mte_node_type(mas->node); @@ -4493,8 +4491,8 @@ restart: pivots = ma_pivots(mn, mt); max = pivots[0]; mas->node = mas_slot(mas, slots, 0); - if (unlikely(mas_dead_node(mas, range_start))) - goto restart; + if (unlikely(mte_dead_node(mas->node))) + return NULL; } mas->max = max; @@ -4502,30 +4500,27 @@ restart: mt = mte_node_type(mas->node); slots = ma_slots(mn, mt); /* 0 or 1 must be set */ - offset = 0; - if (range_start > limit) + if (*r_start > limit) goto none; - entry = mas_slot(mas, slots, offset); + entry = mas_slot(mas, slots, mas->offset); if(likely(entry)) - goto done; + return entry; pivots = ma_pivots(mn, mt); - range_start = pivots[0] + 1; + *r_start = pivots[0] + 1; + mas->offset++; - if (range_start > limit) + if (*r_start > limit) goto none; - entry = mas_slot(mas, slots, offset); + entry = mas_slot(mas, slots, mas->offset); if(likely(entry)) - goto done; + return entry; none: mas->node = MAS_NONE; -done: - mas->offset = offset; - *r_start = range_start; - return entry; + return NULL; } /* -- 2.50.1