From 2d9d0d22034e9bfb84d78be71f31ea8c40c55189 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Fri, 9 Nov 2012 14:04:22 +1100 Subject: [PATCH] mm-check-rb_subtree_gap-correctness-fix repair innovative coding-style inventions Cc: "David S. Miller" Cc: "H. Peter Anvin" Cc: Chris Metcalf Cc: Hugh Dickins Cc: Ingo Molnar Cc: Michel Lespinasse Cc: Paul Mundt Cc: Ralf Baechle Cc: Rik van Riel Cc: Russell King Cc: Thomas Gleixner Signed-off-by: Andrew Morton --- mm/mmap.c | 49 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/mm/mmap.c b/mm/mmap.c index 27f981a2a996..a8ffc5d4123a 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -372,16 +372,25 @@ static int browse_rb(struct rb_root *root) for (nd = rb_first(root); nd; nd = rb_next(nd)) { struct vm_area_struct *vma; vma = rb_entry(nd, struct vm_area_struct, vm_rb); - if (vma->vm_start < prev) - printk("vm_start %lx prev %lx\n", vma->vm_start, prev), bug = 1; - if (vma->vm_start < pend) - printk("vm_start %lx pend %lx\n", vma->vm_start, pend), bug = 1; - if (vma->vm_start > vma->vm_end) - printk("vm_end %lx < vm_start %lx\n", vma->vm_end, vma->vm_start), bug = 1; - if (vma->rb_subtree_gap != vma_compute_subtree_gap(vma)) + if (vma->vm_start < prev) { + printk("vm_start %lx prev %lx\n", vma->vm_start, prev); + bug = 1; + } + if (vma->vm_start < pend) { + printk("vm_start %lx pend %lx\n", vma->vm_start, pend); + bug = 1; + } + if (vma->vm_start > vma->vm_end) { + printk("vm_end %lx < vm_start %lx\n", + vma->vm_end, vma->vm_start); + bug = 1; + } + if (vma->rb_subtree_gap != vma_compute_subtree_gap(vma)) { printk("free gap %lx, correct %lx\n", vma->rb_subtree_gap, - vma_compute_subtree_gap(vma)), bug = 1; + vma_compute_subtree_gap(vma)); + bug = 1; + } i++; pn = nd; prev = vma->vm_start; @@ -390,8 +399,10 @@ static int browse_rb(struct rb_root *root) j = 0; for (nd = pn; nd; nd = rb_prev(nd)) j++; - if (i != j) - printk("backwards %d, forwards %d\n", j, i), bug = 1; + if (i != j) { + printk("backwards %d, forwards %d\n", j, i); + bug = 1; + } return bug ? -1 : i; } @@ -411,14 +422,20 @@ void validate_mm(struct mm_struct *mm) vma = vma->vm_next; i++; } - if (i != mm->map_count) - printk("map_count %d vm_next %d\n", mm->map_count, i), bug = 1; - if (highest_address != mm->highest_vm_end) + if (i != mm->map_count) { + printk("map_count %d vm_next %d\n", mm->map_count, i); + bug = 1; + } + if (highest_address != mm->highest_vm_end) { printk("mm->highest_vm_end %lx, found %lx\n", - mm->highest_vm_end, highest_address), bug = 1; + mm->highest_vm_end, highest_address); + bug = 1; + } i = browse_rb(&mm->mm_rb); - if (i != mm->map_count) - printk("map_count %d rb %d\n", mm->map_count, i), bug = 1; + if (i != mm->map_count) { + printk("map_count %d rb %d\n", mm->map_count, i); + bug = 1; + } BUG_ON(bug); } #else -- 2.39.5