]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
maple_tree: Rework mas_first_entry() to remove unnecessary temps
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 6 Jul 2021 17:58:13 +0000 (13:58 -0400)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 6 Jul 2021 18:04:48 +0000 (14:04 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
lib/maple_tree.c

index 50e32a7498c7dee5e00c7461ec29012c3d66fa4c..cc70ef6c606e03472aa363285e2e4d144f2592b0 100644 (file)
@@ -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;
 }
 
 /*