|
@@ -3090,32 +3090,31 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order,
|
|
if (page)
|
|
if (page)
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
- if (!(gfp_mask & __GFP_NOFAIL)) {
|
|
|
|
- /* Coredumps can quickly deplete all memory reserves */
|
|
|
|
- if (current->flags & PF_DUMPCORE)
|
|
|
|
- goto out;
|
|
|
|
- /* The OOM killer will not help higher order allocs */
|
|
|
|
- if (order > PAGE_ALLOC_COSTLY_ORDER)
|
|
|
|
- goto out;
|
|
|
|
- /* The OOM killer does not needlessly kill tasks for lowmem */
|
|
|
|
- if (ac->high_zoneidx < ZONE_NORMAL)
|
|
|
|
- goto out;
|
|
|
|
- if (pm_suspended_storage())
|
|
|
|
- goto out;
|
|
|
|
- /*
|
|
|
|
- * XXX: GFP_NOFS allocations should rather fail than rely on
|
|
|
|
- * other request to make a forward progress.
|
|
|
|
- * We are in an unfortunate situation where out_of_memory cannot
|
|
|
|
- * do much for this context but let's try it to at least get
|
|
|
|
- * access to memory reserved if the current task is killed (see
|
|
|
|
- * out_of_memory). Once filesystems are ready to handle allocation
|
|
|
|
- * failures more gracefully we should just bail out here.
|
|
|
|
- */
|
|
|
|
|
|
+ /* Coredumps can quickly deplete all memory reserves */
|
|
|
|
+ if (current->flags & PF_DUMPCORE)
|
|
|
|
+ goto out;
|
|
|
|
+ /* The OOM killer will not help higher order allocs */
|
|
|
|
+ if (order > PAGE_ALLOC_COSTLY_ORDER)
|
|
|
|
+ goto out;
|
|
|
|
+ /* The OOM killer does not needlessly kill tasks for lowmem */
|
|
|
|
+ if (ac->high_zoneidx < ZONE_NORMAL)
|
|
|
|
+ goto out;
|
|
|
|
+ if (pm_suspended_storage())
|
|
|
|
+ goto out;
|
|
|
|
+ /*
|
|
|
|
+ * XXX: GFP_NOFS allocations should rather fail than rely on
|
|
|
|
+ * other request to make a forward progress.
|
|
|
|
+ * We are in an unfortunate situation where out_of_memory cannot
|
|
|
|
+ * do much for this context but let's try it to at least get
|
|
|
|
+ * access to memory reserved if the current task is killed (see
|
|
|
|
+ * out_of_memory). Once filesystems are ready to handle allocation
|
|
|
|
+ * failures more gracefully we should just bail out here.
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+ /* The OOM killer may not free memory on a specific node */
|
|
|
|
+ if (gfp_mask & __GFP_THISNODE)
|
|
|
|
+ goto out;
|
|
|
|
|
|
- /* The OOM killer may not free memory on a specific node */
|
|
|
|
- if (gfp_mask & __GFP_THISNODE)
|
|
|
|
- goto out;
|
|
|
|
- }
|
|
|
|
/* Exhausted what can be done so it's blamo time */
|
|
/* Exhausted what can be done so it's blamo time */
|
|
if (out_of_memory(&oc) || WARN_ON_ONCE(gfp_mask & __GFP_NOFAIL)) {
|
|
if (out_of_memory(&oc) || WARN_ON_ONCE(gfp_mask & __GFP_NOFAIL)) {
|
|
*did_some_progress = 1;
|
|
*did_some_progress = 1;
|