From 86d9de0898908aebc6b97a38c5dbf0f5b376643e Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Thu, 18 May 2023 10:55:41 -0400 Subject: [PATCH] FROMGIT: maple_tree: clear up index and last setting in single entry tree When there is a single entry tree (range of 0-0 pointing to an entry), then ensure the limit is either 0-0 or 1-oo, depending on where the user walks. Ensure the correct node setting as well; either MAS_ROOT or MAS_NONE. Link: https://lkml.kernel.org/r/20230518145544.1722059-33-Liam.Howlett@oracle.com Signed-off-by: Liam R. Howlett Cc: Peng Zhang Cc: David Binderman Cc: Sergey Senozhatsky Cc: Vernon Yang Cc: Wei Yang Signed-off-by: Andrew Morton (cherry picked from commit c0b1bdd9011ef34b654fe62f2607bff0eb1ef0a8 git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm mm-unstable) Bug: 274059236 Change-Id: I22a41c01e525fde88774b509cd5cbc60f56f6dc5 Signed-off-by: Suren Baghdasaryan --- lib/maple_tree.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index cd731b89d9bf..01be00aefef8 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -5050,24 +5050,25 @@ void *mas_walk(struct ma_state *mas) { void *entry; + if (mas_is_none(mas) || mas_is_paused(mas) || mas_is_ptr(mas)) + mas->node = MAS_START; retry: entry = mas_state_walk(mas); - if (mas_is_start(mas)) + if (mas_is_start(mas)) { goto retry; - - if (mas_is_ptr(mas)) { - if (!mas->index) { - mas->last = 0; - } else { - mas->index = 1; - mas->last = ULONG_MAX; - } - return entry; - } - - if (mas_is_none(mas)) { + } else if (mas_is_none(mas)) { mas->index = 0; mas->last = ULONG_MAX; + } else if (mas_is_ptr(mas)) { + if (!mas->index) { + mas->last = 0; + return entry; + } + + mas->index = 1; + mas->last = ULONG_MAX; + mas->node = MAS_NONE; + return NULL; } return entry;