From b15513cf9e8f7853112b36921177acc16560e3b6 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 6e441b2eec8a..a7da2f73c682 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -1353,11 +1353,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