summaryrefslogtreecommitdiffstats
path: root/mm/page_alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r--mm/page_alloc.c24
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;