]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm: Return a bool from anon_vma_interval_tree_verify()
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Sun, 7 Feb 2021 00:47:59 +0000 (19:47 -0500)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Wed, 19 May 2021 20:39:09 +0000 (16:39 -0400)
Added to allow printing which vma has the issue

Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
include/linux/mm.h
mm/interval_tree.c
mm/mmap.c

index e1f1ae32fa9d98114325e74c0ae3ba37d9db1052..6bf5369ad3198e9e0129ede46de7d4610b86bd12 100644 (file)
@@ -2526,7 +2526,7 @@ anon_vma_interval_tree_iter_first(struct rb_root_cached *root,
 struct anon_vma_chain *anon_vma_interval_tree_iter_next(
        struct anon_vma_chain *node, unsigned long start, unsigned long last);
 #ifdef CONFIG_DEBUG_VM_RB
-void anon_vma_interval_tree_verify(struct anon_vma_chain *node);
+bool anon_vma_interval_tree_verify(struct anon_vma_chain *node);
 #endif
 
 #define anon_vma_interval_tree_foreach(avc, root, start, last)          \
index 32e390c42c53f24fc4d5b3eea4319c5eda46681f..5958e27d4381b56c3ae939fdc2cef06e0622175a 100644 (file)
@@ -103,9 +103,9 @@ anon_vma_interval_tree_iter_next(struct anon_vma_chain *node,
 }
 
 #ifdef CONFIG_DEBUG_VM_RB
-void anon_vma_interval_tree_verify(struct anon_vma_chain *node)
+bool anon_vma_interval_tree_verify(struct anon_vma_chain *node)
 {
-       WARN_ON_ONCE(node->cached_vma_start != avc_start_pgoff(node));
-       WARN_ON_ONCE(node->cached_vma_last != avc_last_pgoff(node));
+       return WARN_ON_ONCE(node->cached_vma_start != avc_start_pgoff(node)) ||
+               WARN_ON_ONCE(node->cached_vma_last != avc_last_pgoff(node));
 }
 #endif
index 994aa9a70fb71c57a8e79e75e06bec885a8c1c39..610f60562e68dd3f2f1b53768a51a2bbeeb4b077 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -326,8 +326,10 @@ static void validate_mm(struct mm_struct *mm)
                struct anon_vma_chain *avc;
                if (anon_vma) {
                        anon_vma_lock_read(anon_vma);
-                       list_for_each_entry(avc, &vma->anon_vma_chain, same_vma)
-                               anon_vma_interval_tree_verify(avc);
+                       list_for_each_entry(avc, &vma->anon_vma_chain, same_vma) {
+                               if (anon_vma_interval_tree_verify(avc))
+                                       pr_warn("Interval tree issue in %px", vma);
+                       }
                        anon_vma_unlock_read(anon_vma);
                }
 #endif
@@ -339,6 +341,7 @@ static void validate_mm(struct mm_struct *mm)
                pr_emerg("map_count %d mas_for_each %d\n", mm->map_count, i);
                bug = 1;
        }
+
        VM_BUG_ON_MM(bug, mm);
 }