diff options
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 49 |
1 files changed, 24 insertions, 25 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index dd36da6ffef5..1e37740837ac 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -3090,32 +3090,31 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order, | |||
3090 | if (page) | 3090 | if (page) |
3091 | goto out; | 3091 | goto out; |
3092 | 3092 | ||
3093 | if (!(gfp_mask & __GFP_NOFAIL)) { | 3093 | /* Coredumps can quickly deplete all memory reserves */ |
3094 | /* Coredumps can quickly deplete all memory reserves */ | 3094 | if (current->flags & PF_DUMPCORE) |
3095 | if (current->flags & PF_DUMPCORE) | 3095 | goto out; |
3096 | goto out; | 3096 | /* The OOM killer will not help higher order allocs */ |
3097 | /* The OOM killer will not help higher order allocs */ | 3097 | if (order > PAGE_ALLOC_COSTLY_ORDER) |
3098 | if (order > PAGE_ALLOC_COSTLY_ORDER) | 3098 | goto out; |
3099 | goto out; | 3099 | /* The OOM killer does not needlessly kill tasks for lowmem */ |
3100 | /* The OOM killer does not needlessly kill tasks for lowmem */ | 3100 | if (ac->high_zoneidx < ZONE_NORMAL) |
3101 | if (ac->high_zoneidx < ZONE_NORMAL) | 3101 | goto out; |
3102 | goto out; | 3102 | if (pm_suspended_storage()) |
3103 | if (pm_suspended_storage()) | 3103 | goto out; |
3104 | goto out; | 3104 | /* |
3105 | /* | 3105 | * XXX: GFP_NOFS allocations should rather fail than rely on |
3106 | * XXX: GFP_NOFS allocations should rather fail than rely on | 3106 | * other request to make a forward progress. |
3107 | * other request to make a forward progress. | 3107 | * We are in an unfortunate situation where out_of_memory cannot |
3108 | * We are in an unfortunate situation where out_of_memory cannot | 3108 | * do much for this context but let's try it to at least get |
3109 | * do much for this context but let's try it to at least get | 3109 | * access to memory reserved if the current task is killed (see |
3110 | * access to memory reserved if the current task is killed (see | 3110 | * out_of_memory). Once filesystems are ready to handle allocation |
3111 | * out_of_memory). Once filesystems are ready to handle allocation | 3111 | * failures more gracefully we should just bail out here. |
3112 | * failures more gracefully we should just bail out here. | 3112 | */ |
3113 | */ | 3113 | |
3114 | /* The OOM killer may not free memory on a specific node */ | ||
3115 | if (gfp_mask & __GFP_THISNODE) | ||
3116 | goto out; | ||
3114 | 3117 | ||
3115 | /* The OOM killer may not free memory on a specific node */ | ||
3116 | if (gfp_mask & __GFP_THISNODE) | ||
3117 | goto out; | ||
3118 | } | ||
3119 | /* Exhausted what can be done so it's blamo time */ | 3118 | /* Exhausted what can be done so it's blamo time */ |
3120 | if (out_of_memory(&oc) || WARN_ON_ONCE(gfp_mask & __GFP_NOFAIL)) { | 3119 | if (out_of_memory(&oc) || WARN_ON_ONCE(gfp_mask & __GFP_NOFAIL)) { |
3121 | *did_some_progress = 1; | 3120 | *did_some_progress = 1; |