diff options
author | Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> | 2016-03-17 17:20:48 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-03-17 18:09:34 -0400 |
commit | 0a687aace3b8e215e08eed8a67014f5b8f133ab0 (patch) | |
tree | b81d0496ee8ccf3060566c57feb0f77a6394aa57 | |
parent | 6afcf2895e6f229476bd0dc95fe915e639ae0a49 (diff) |
mm,oom: do not loop !__GFP_FS allocation if the OOM killer is disabled
After the OOM killer is disabled during suspend operation, any
!__GFP_NOFAIL && __GFP_FS allocations are forced to fail. Thus, any
!__GFP_NOFAIL && !__GFP_FS allocations should be forced to fail as well.
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
Acked-by: Michal Hocko <mhocko@suse.com>
Acked-by: David Rientjes <rientjes@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | mm/page_alloc.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 3583f7195d5b..a762be57e46e 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -2858,8 +2858,12 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order, | |||
2858 | * XXX: Page reclaim didn't yield anything, | 2858 | * XXX: Page reclaim didn't yield anything, |
2859 | * and the OOM killer can't be invoked, but | 2859 | * and the OOM killer can't be invoked, but |
2860 | * keep looping as per tradition. | 2860 | * keep looping as per tradition. |
2861 | * | ||
2862 | * But do not keep looping if oom_killer_disable() | ||
2863 | * was already called, for the system is trying to | ||
2864 | * enter a quiescent state during suspend. | ||
2861 | */ | 2865 | */ |
2862 | *did_some_progress = 1; | 2866 | *did_some_progress = !oom_killer_disabled; |
2863 | goto out; | 2867 | goto out; |
2864 | } | 2868 | } |
2865 | if (pm_suspended_storage()) | 2869 | if (pm_suspended_storage()) |