From 10baabda8ba5a01ca81e095a1097f633838ab351 Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Thu, 24 Nov 2022 10:48:23 -0500 Subject: [PATCH] maple_tree: Detect dead nodes in mas_start() When initially starting a search, the root node may already be in the process of being replaced in RCU mode. Detect and restart the walk if this is the case. Signed-off-by: Liam R. Howlett --- lib/maple_tree.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 6bf865c720417..c5bbd2a072288 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -1365,11 +1365,15 @@ static inline struct maple_enode *mas_start(struct ma_state *mas) mas->depth = 0; mas->offset = 0; +retry: root = mas_root(mas); /* Tree with nodes */ if (likely(xa_is_node(root))) { mas->depth = 1; mas->node = mte_safe_root(root); + if (mte_dead_node(mas->node)) + goto retry; + return NULL; } -- 2.50.1