diff options
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 2aaafe82f513..36a168e383b5 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -2171,12 +2171,25 @@ rebalance: | |||
2171 | 2171 | ||
2172 | nopage: | 2172 | nopage: |
2173 | if (!(gfp_mask & __GFP_NOWARN) && printk_ratelimit()) { | 2173 | if (!(gfp_mask & __GFP_NOWARN) && printk_ratelimit()) { |
2174 | printk(KERN_WARNING "%s: page allocation failure." | 2174 | unsigned int filter = SHOW_MEM_FILTER_NODES; |
2175 | " order:%d, mode:0x%x\n", | 2175 | |
2176 | /* | ||
2177 | * This documents exceptions given to allocations in certain | ||
2178 | * contexts that are allowed to allocate outside current's set | ||
2179 | * of allowed nodes. | ||
2180 | */ | ||
2181 | if (!(gfp_mask & __GFP_NOMEMALLOC)) | ||
2182 | if (test_thread_flag(TIF_MEMDIE) || | ||
2183 | (current->flags & (PF_MEMALLOC | PF_EXITING))) | ||
2184 | filter &= ~SHOW_MEM_FILTER_NODES; | ||
2185 | if (in_interrupt() || !wait) | ||
2186 | filter &= ~SHOW_MEM_FILTER_NODES; | ||
2187 | |||
2188 | pr_warning("%s: page allocation failure. order:%d, mode:0x%x\n", | ||
2176 | current->comm, order, gfp_mask); | 2189 | current->comm, order, gfp_mask); |
2177 | dump_stack(); | 2190 | dump_stack(); |
2178 | if (!should_suppress_show_mem()) | 2191 | if (!should_suppress_show_mem()) |
2179 | show_mem(); | 2192 | __show_mem(filter); |
2180 | } | 2193 | } |
2181 | return page; | 2194 | return page; |
2182 | got_pg: | 2195 | got_pg: |