diff options
author | Catalin Marinas <catalin.marinas@arm.com> | 2009-06-11 13:23:19 +0100 |
---|---|---|
committer | Catalin Marinas <catalin.marinas@arm.com> | 2009-06-11 17:03:30 +0100 |
commit | dbb1f81ca67a56c6cfce4c94d07c76378fd4af9e (patch) | |
tree | a3a973f1790713fea944b293bb439c7fe84ea1ab /mm | |
parent | 89219d37a2377c44fde7bff0bf0623453c05329a (diff) | |
download | lwn-dbb1f81ca67a56c6cfce4c94d07c76378fd4af9e.tar.gz lwn-dbb1f81ca67a56c6cfce4c94d07c76378fd4af9e.zip |
kmemleak: Add kmemleak_alloc callback from alloc_large_system_hash
The alloc_large_system_hash function is called from various places in
the kernel and it contains pointers to other allocated structures. It
therefore needs to be traced by kmemleak.
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/page_alloc.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 474c7e9dd51a..17d5f539a9aa 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -46,6 +46,7 @@ #include <linux/page-isolation.h> #include <linux/page_cgroup.h> #include <linux/debugobjects.h> +#include <linux/kmemleak.h> #include <asm/tlbflush.h> #include <asm/div64.h> @@ -4546,6 +4547,16 @@ void *__init alloc_large_system_hash(const char *tablename, if (_hash_mask) *_hash_mask = (1 << log2qty) - 1; + /* + * If hashdist is set, the table allocation is done with __vmalloc() + * which invokes the kmemleak_alloc() callback. This function may also + * be called before the slab and kmemleak are initialised when + * kmemleak simply buffers the request to be executed later + * (GFP_ATOMIC flag ignored in this case). + */ + if (!hashdist) + kmemleak_alloc(table, size, 1, GFP_ATOMIC); + return table; } |