From: Liam R. Howlett Date: Thu, 24 Nov 2022 15:48:23 +0000 (-0500) Subject: maple_tree: Detect dead nodes in mas_start() X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=b15513cf9e8f7853112b36921177acc16560e3b6;p=users%2Fjedix%2Flinux-maple.git 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 --- 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; }