|
@@ -2732,8 +2732,21 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order,
|
|
goto out;
|
|
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;
|
|
|
|
+
|
|
|
|
+ if (gfp_mask & __GFP_NOFAIL) {
|
|
|
|
+ page = get_page_from_freelist(gfp_mask, order,
|
|
|
|
+ ALLOC_NO_WATERMARKS|ALLOC_CPUSET, ac);
|
|
|
|
+ /*
|
|
|
|
+ * fallback to ignore cpuset restriction if our nodes
|
|
|
|
+ * are depleted
|
|
|
|
+ */
|
|
|
|
+ if (!page)
|
|
|
|
+ page = get_page_from_freelist(gfp_mask, order,
|
|
|
|
+ ALLOC_NO_WATERMARKS, ac);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
out:
|
|
out:
|
|
mutex_unlock(&oom_lock);
|
|
mutex_unlock(&oom_lock);
|
|
return page;
|
|
return page;
|