Commit 9858db504caedb2424b9a32744c23f9a81ec1731

Authored by Nick Piggin
Committed by Linus Torvalds
1 parent dafb13673c

[PATCH] mm: locks_freed fix

Move the lock debug checks below the page reserved checks.  Also, having
debug_check_no_locks_freed in kernel_map_pages is wrong.

Signed-off-by: Nick Piggin <npiggin@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

Showing 2 changed files with 5 additions and 10 deletions Side-by-side Diff

... ... @@ -1103,12 +1103,7 @@
1103 1103  
1104 1104 #ifndef CONFIG_DEBUG_PAGEALLOC
1105 1105 static inline void
1106   -kernel_map_pages(struct page *page, int numpages, int enable)
1107   -{
1108   - if (!PageHighMem(page) && !enable)
1109   - debug_check_no_locks_freed(page_address(page),
1110   - numpages * PAGE_SIZE);
1111   -}
  1106 +kernel_map_pages(struct page *page, int numpages, int enable) {}
1112 1107 #endif
1113 1108  
1114 1109 extern struct vm_area_struct *get_gate_vma(struct task_struct *tsk);
... ... @@ -495,15 +495,13 @@
495 495 int i;
496 496 int reserved = 0;
497 497  
498   - if (!PageHighMem(page))
499   - debug_check_no_locks_freed(page_address(page),
500   - PAGE_SIZE<<order);
501   -
502 498 for (i = 0 ; i < (1 << order) ; ++i)
503 499 reserved += free_pages_check(page + i);
504 500 if (reserved)
505 501 return;
506 502  
  503 + if (!PageHighMem(page))
  504 + debug_check_no_locks_freed(page_address(page),PAGE_SIZE<<order);
507 505 arch_free_page(page, order);
508 506 kernel_map_pages(page, 1 << order, 0);
509 507  
... ... @@ -787,6 +785,8 @@
787 785 if (free_pages_check(page))
788 786 return;
789 787  
  788 + if (!PageHighMem(page))
  789 + debug_check_no_locks_freed(page_address(page), PAGE_SIZE);
790 790 arch_free_page(page, 0);
791 791 kernel_map_pages(page, 1, 0);
792 792