From: Alexander Nyberg After looking at the recent memory leak thread I think it might have helped having the gfp mask of the allocated pages. This makes that available, no changes needed for the user-space sorter, same trace with Output looks like: 4819 times: Page allocated via order 0, mask 0x50 [0xc012b7b9] find_lock_page+25 [0xc012b8c8] find_or_create_page+152 [0xc0147d74] grow_dev_page+36 [0xc0148164] __find_get_block+84 [0xc0147ebc] __getblk_slow+124 [0xc0148164] __find_get_block+84 [0xc01481e7] __getblk+55 [0xc0185d14] do_readahead+100 Signed-off-by: Andrew Morton --- 25-akpm/fs/proc/proc_misc.c | 3 ++- 25-akpm/include/linux/mm.h | 1 + 25-akpm/mm/page_alloc.c | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff -puN fs/proc/proc_misc.c~add-gfp_mask-to-page-owner fs/proc/proc_misc.c --- 25/fs/proc/proc_misc.c~add-gfp_mask-to-page-owner 2005-03-15 22:45:10.000000000 -0800 +++ 25-akpm/fs/proc/proc_misc.c 2005-03-15 22:45:10.000000000 -0800 @@ -571,7 +571,8 @@ read_page_owner(struct file *file, char if (!kbuf) return -ENOMEM; - ret = snprintf(kbuf, 1024, "Page allocated via order %d\n", page->order); + ret = snprintf(kbuf, 1024, "Page allocated via order %d, mask 0x%x\n", + page->order, page->gfp_mask); for (i = 0; i < 8; i++) { if (!page->trace[i]) diff -puN include/linux/mm.h~add-gfp_mask-to-page-owner include/linux/mm.h --- 25/include/linux/mm.h~add-gfp_mask-to-page-owner 2005-03-15 22:45:10.000000000 -0800 +++ 25-akpm/include/linux/mm.h 2005-03-15 22:45:10.000000000 -0800 @@ -266,6 +266,7 @@ struct page { #endif /* WANT_PAGE_VIRTUAL */ #ifdef CONFIG_PAGE_OWNER int order; + unsigned int gfp_mask; unsigned long trace[8]; #endif }; diff -puN mm/page_alloc.c~add-gfp_mask-to-page-owner mm/page_alloc.c --- 25/mm/page_alloc.c~add-gfp_mask-to-page-owner 2005-03-15 22:45:10.000000000 -0800 +++ 25-akpm/mm/page_alloc.c 2005-03-15 22:45:10.000000000 -0800 @@ -1050,6 +1050,7 @@ got_pg: asm ("movl %%ebp, %0" : "=r" (bp) : ); #endif page->order = (int) order; + page->gfp_mask = gfp_mask; __stack_trace(page, &address, bp); } #endif /* CONFIG_PAGE_OWNER */ _