]> 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>
Sun, 7 Feb 2021 01:21:17 +0000 (20:21 -0500)
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 db8a413e0e0900d9b53a4f9abd30237b900237fd..dab8407d67166c1d3d9796fbd7288ed6a85612b5 100644 (file)
@@ -2496,7 +2496,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 11c75fb075842450f7d4eeafeb183a732559d994..b3e22301471d90a446e06ee3c7952afe92d00d0a 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 452baaf60c404bd02f9477aeb4274e56727497a1..b09418132751136086210c9eb2f937dfef6f8ee7 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -319,8 +319,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
@@ -332,6 +334,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);
 }