|
@@ -2353,8 +2353,15 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order,
|
|
|
if (ac->high_zoneidx < ZONE_NORMAL)
|
|
|
goto out;
|
|
|
/* The OOM killer does not compensate for light reclaim */
|
|
|
- if (!(gfp_mask & __GFP_FS))
|
|
|
+ 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 should_alloc_retry().
|
|
|
+ */
|
|
|
+ *did_some_progress = 1;
|
|
|
goto out;
|
|
|
+ }
|
|
|
/*
|
|
|
* GFP_THISNODE contains __GFP_NORETRY and we never hit this.
|
|
|
* Sanity check for bare calls of __GFP_THISNODE, not real OOM.
|