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=10baabda8ba5a01ca81e095a1097f633838ab351;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 6bf865c72041..c5bbd2a07228 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; }