diff options
author | David Rientjes <rientjes@google.com> | 2009-07-29 18:02:06 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-07-29 22:10:34 -0400 |
commit | 6583bb64fc370842b32a87c67750c26f6d559af0 (patch) | |
tree | 321681ebc6ff893318d67859b24f199b9111cbc8 /mm/page_alloc.c | |
parent | e084b2d95e48b31aa45f9c49ffc6cdae8bdb21d4 (diff) |
mm: avoid endless looping for oom killed tasks
If a task is oom killed and still cannot find memory when trying with
no watermarks, it's better to fail the allocation attempt than to loop
endlessly. Direct reclaim has already failed and the oom killer will
be a no-op since current has yet to die, so there is no other
alternative for allocations that are not __GFP_NOFAIL.
Acked-by: Mel Gorman <mel@csn.ul.ie>
Signed-off-by: David Rientjes <rientjes@google.com>
Acked-by: Hugh Dickins <hugh.dickins@tiscali.co.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index ae28c22a7fdb..2dbb2fc68837 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -1794,6 +1794,10 @@ rebalance: | |||
1794 | if (p->flags & PF_MEMALLOC) | 1794 | if (p->flags & PF_MEMALLOC) |
1795 | goto nopage; | 1795 | goto nopage; |
1796 | 1796 | ||
1797 | /* Avoid allocations with no watermarks from looping endlessly */ | ||
1798 | if (test_thread_flag(TIF_MEMDIE) && !(gfp_mask & __GFP_NOFAIL)) | ||
1799 | goto nopage; | ||
1800 | |||
1797 | /* Try direct reclaim and then allocating */ | 1801 | /* Try direct reclaim and then allocating */ |
1798 | page = __alloc_pages_direct_reclaim(gfp_mask, order, | 1802 | page = __alloc_pages_direct_reclaim(gfp_mask, order, |
1799 | zonelist, high_zoneidx, | 1803 | zonelist, high_zoneidx, |