]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
maple_tree: Detect dead nodes in mas_start()
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Thu, 24 Nov 2022 15:48:23 +0000 (10:48 -0500)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Tue, 13 Dec 2022 21:03:40 +0000 (16:03 -0500)
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 <Liam.Howlett@oracle.com>
lib/maple_tree.c

index 6e441b2eec8ab3427c6cafc4d72f15ece6c07bb9..a7da2f73c6827fead1879eee40a861296fa219b5 100644 (file)
@@ -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;
                }