|
@@ -2875,22 +2875,18 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order,
|
|
|
/* The OOM killer does not needlessly kill tasks for lowmem */
|
|
|
if (ac->high_zoneidx < ZONE_NORMAL)
|
|
|
goto out;
|
|
|
- /* The OOM killer does not compensate for IO-less reclaim */
|
|
|
- if (!(gfp_mask & __GFP_FS)) {
|
|
|
- /*
|
|
|
- * XXX: Page reclaim didn't yield anything,
|
|
|
- * and the OOM killer can't be invoked, but
|
|
|
- * keep looping as per tradition.
|
|
|
- *
|
|
|
- * But do not keep looping if oom_killer_disable()
|
|
|
- * was already called, for the system is trying to
|
|
|
- * enter a quiescent state during suspend.
|
|
|
- */
|
|
|
- *did_some_progress = !oom_killer_disabled;
|
|
|
- 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;
|