]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
maple_tree: Fix __mas_next() when the limit is hit
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Fri, 20 Nov 2020 03:43:40 +0000 (22:43 -0500)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Sat, 21 Nov 2020 00:57:22 +0000 (19:57 -0500)
When a search limit is hit, restore the previous location so that
mas_next() works on that particular ma_state.

Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
lib/maple_tree.c

index 63d4bc2e00c1a09b0ee59a26155c44874b6d6e3f..ab207b44afed193358979a276cc5b7487c386046 100644 (file)
@@ -3725,7 +3725,8 @@ static inline void *__mas_next(struct ma_state *mas, unsigned long limit,
                unsigned long *range_start)
 {
        void *entry = NULL;
-       struct maple_enode *prev_node;
+       struct maple_enode *prev_node = mas->node;
+       unsigned char offset = mas->offset;
        unsigned long index = mas->index;
        enum maple_type mt = mte_node_type(mas->node);
 
@@ -3749,10 +3750,15 @@ retry:
                if (mas_next_nentry(mas, limit, range_start))
                        break;
 
-               if (*range_start > limit)
+               if (*range_start > limit) {
+                       mas->offset = offset;
+                       mas->node = prev_node;
                        return NULL;
+               }
 
 next_node:
+               prev_node = mas->node;
+               offset = mas->offset;
                mas_next_node(mas, limit);
                mas->offset = 0;
                mt = mte_node_type(mas->node);