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; |
