mm: verify compound order when freeing a page
authorYu Zhao <[email protected]>
Wed, 10 Dec 2014 23:43:17 +0000 (15:43 -0800)
committerLinus Torvalds <[email protected]>
Thu, 11 Dec 2014 01:41:06 +0000 (17:41 -0800)
This allows us to catch the bug fixed in the previous patch (mm: free
compound page with correct order).

Here we also verify whether a page is tail page or not -- tail pages are
supposed to be freed along with their head, not by themselves.

Signed-off-by: Yu Zhao <[email protected]>
Reviewed-by: "Kirill A. Shutemov" <[email protected]>
Cc: Andrea Arcangeli <[email protected]>
Cc: Mel Gorman <[email protected]>
Cc: David Rientjes <[email protected]>
Cc: Bob Liu <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
mm/page_alloc.c

index f3a6bf12cbc11a3d2d2cbbbd57043efd92040767..b7c18f09469707dc03367f41ecf569dafca10533 100644 (file)
@@ -741,6 +741,9 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
        int i;
        int bad = 0;
 
+       VM_BUG_ON_PAGE(PageTail(page), page);
+       VM_BUG_ON_PAGE(PageHead(page) && compound_order(page) != order, page);
+
        trace_mm_page_free(page, order);
        kmemcheck_free_shadow(page, order);