From: Zhaoyang Huang <zhaoyang.huang@xxxxxxxxxx> Bad pages will failed go back to allocator and leaved as orphan pages, track them down via kmemleak. Signed-off-by: Zhaoyang Huang <zhaoyang.huang@xxxxxxxxxx> --- mm/page_alloc.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index e5486d4..24f682e 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1408,7 +1408,7 @@ static __always_inline bool free_pages_prepare(struct page *page, __memcg_kmem_uncharge_page(page, order); reset_page_owner(page, order); page_table_check_free(page, order); - return false; + goto err; } /* @@ -1442,7 +1442,7 @@ static __always_inline bool free_pages_prepare(struct page *page, if (check_free) bad += check_free_page(page); if (bad) - return false; + goto err; page_cpupid_reset_last(page); page->flags &= ~PAGE_FLAGS_CHECK_AT_PREP; @@ -1486,6 +1486,10 @@ static __always_inline bool free_pages_prepare(struct page *page, debug_pagealloc_unmap_pages(page, 1 << order); return true; +err: + kmemleak_alloc(page_address(page), PAGE_SIZE << order, 1, GFP_KERNEL); + return false; + } #ifdef CONFIG_DEBUG_VM -- 1.9.1