From: Liam R. Howlett Date: Fri, 20 Nov 2020 03:43:40 +0000 (-0500) Subject: maple_tree: Fix __mas_next() when the limit is hit X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=6d0d9e23b9a979c75d518e35cb399c4cf39db05c;p=users%2Fjedix%2Flinux-maple.git maple_tree: Fix __mas_next() when the limit is hit 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 --- diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 63d4bc2e00c1..ab207b44afed 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -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);