aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/mmap.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/mm/mmap.c b/mm/mmap.c
index cfc0cdca421e..918c9ec5043f 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -390,8 +390,9 @@ static long vma_compute_subtree_gap(struct vm_area_struct *vma)
390} 390}
391 391
392#ifdef CONFIG_DEBUG_VM_RB 392#ifdef CONFIG_DEBUG_VM_RB
393static int browse_rb(struct rb_root *root) 393static int browse_rb(struct mm_struct *mm)
394{ 394{
395 struct rb_root *root = &mm->mm_rb;
395 int i = 0, j, bug = 0; 396 int i = 0, j, bug = 0;
396 struct rb_node *nd, *pn = NULL; 397 struct rb_node *nd, *pn = NULL;
397 unsigned long prev = 0, pend = 0; 398 unsigned long prev = 0, pend = 0;
@@ -414,12 +415,14 @@ static int browse_rb(struct rb_root *root)
414 vma->vm_start, vma->vm_end); 415 vma->vm_start, vma->vm_end);
415 bug = 1; 416 bug = 1;
416 } 417 }
418 spin_lock(&mm->page_table_lock);
417 if (vma->rb_subtree_gap != vma_compute_subtree_gap(vma)) { 419 if (vma->rb_subtree_gap != vma_compute_subtree_gap(vma)) {
418 pr_emerg("free gap %lx, correct %lx\n", 420 pr_emerg("free gap %lx, correct %lx\n",
419 vma->rb_subtree_gap, 421 vma->rb_subtree_gap,
420 vma_compute_subtree_gap(vma)); 422 vma_compute_subtree_gap(vma));
421 bug = 1; 423 bug = 1;
422 } 424 }
425 spin_unlock(&mm->page_table_lock);
423 i++; 426 i++;
424 pn = nd; 427 pn = nd;
425 prev = vma->vm_start; 428 prev = vma->vm_start;
@@ -475,7 +478,7 @@ static void validate_mm(struct mm_struct *mm)
475 mm->highest_vm_end, highest_address); 478 mm->highest_vm_end, highest_address);
476 bug = 1; 479 bug = 1;
477 } 480 }
478 i = browse_rb(&mm->mm_rb); 481 i = browse_rb(mm);
479 if (i != mm->map_count) { 482 if (i != mm->map_count) {
480 if (i != -1) 483 if (i != -1)
481 pr_emerg("map_count %d rb %d\n", mm->map_count, i); 484 pr_emerg("map_count %d rb %d\n", mm->map_count, i);