diff options
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index da6d339f1936..6d1c8b06b458 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -2875,22 +2875,18 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order, | |||
2875 | /* The OOM killer does not needlessly kill tasks for lowmem */ | 2875 | /* The OOM killer does not needlessly kill tasks for lowmem */ |
2876 | if (ac->high_zoneidx < ZONE_NORMAL) | 2876 | if (ac->high_zoneidx < ZONE_NORMAL) |
2877 | goto out; | 2877 | goto out; |
2878 | /* The OOM killer does not compensate for IO-less reclaim */ | ||
2879 | if (!(gfp_mask & __GFP_FS)) { | ||
2880 | /* | ||
2881 | * XXX: Page reclaim didn't yield anything, | ||
2882 | * and the OOM killer can't be invoked, but | ||
2883 | * keep looping as per tradition. | ||
2884 | * | ||
2885 | * But do not keep looping if oom_killer_disable() | ||
2886 | * was already called, for the system is trying to | ||
2887 | * enter a quiescent state during suspend. | ||
2888 | */ | ||
2889 | *did_some_progress = !oom_killer_disabled; | ||
2890 | goto out; | ||
2891 | } | ||
2892 | if (pm_suspended_storage()) | 2878 | if (pm_suspended_storage()) |
2893 | goto out; | 2879 | goto out; |
2880 | /* | ||
2881 | * XXX: GFP_NOFS allocations should rather fail than rely on | ||
2882 | * other request to make a forward progress. | ||
2883 | * We are in an unfortunate situation where out_of_memory cannot | ||
2884 | * do much for this context but let's try it to at least get | ||
2885 | * access to memory reserved if the current task is killed (see | ||
2886 | * out_of_memory). Once filesystems are ready to handle allocation | ||
2887 | * failures more gracefully we should just bail out here. | ||
2888 | */ | ||
2889 | |||
2894 | /* The OOM killer may not free memory on a specific node */ | 2890 | /* The OOM killer may not free memory on a specific node */ |
2895 | if (gfp_mask & __GFP_THISNODE) | 2891 | if (gfp_mask & __GFP_THISNODE) |
2896 | goto out; | 2892 | goto out; |