diff --git a/[refs] b/[refs] index 34479ee87b88..e03372c21694 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 89219d37a2377c44fde7bff0bf0623453c05329a +refs/heads/master: dbb1f81ca67a56c6cfce4c94d07c76378fd4af9e diff --git a/trunk/mm/page_alloc.c b/trunk/mm/page_alloc.c index 474c7e9dd51a..17d5f539a9aa 100644 --- a/trunk/mm/page_alloc.c +++ b/trunk/mm/page_alloc.c @@ -46,6 +46,7 @@ #include #include #include +#include #include #include @@ -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; }