From 6d0d9e23b9a979c75d518e35cb399c4cf39db05c Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Thu, 19 Nov 2020 22:43:40 -0500 Subject: [PATCH] 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 --- lib/maple_tree.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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); -- 2.50.1