|
@@ -1561,7 +1561,7 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order,
|
|
|
goto out;
|
|
|
|
|
|
/* The OOM killer will not help higher order allocs */
|
|
|
- if (order > PAGE_ALLOC_COSTLY_ORDER)
|
|
|
+ if (order > PAGE_ALLOC_COSTLY_ORDER && !(gfp_mask & __GFP_NOFAIL))
|
|
|
goto out;
|
|
|
|
|
|
/* Exhausted what can be done so it's blamo time */
|
|
@@ -1781,11 +1781,13 @@ rebalance:
|
|
|
goto got_pg;
|
|
|
|
|
|
/*
|
|
|
- * The OOM killer does not trigger for high-order allocations
|
|
|
- * but if no progress is being made, there are no other
|
|
|
- * options and retrying is unlikely to help
|
|
|
+ * The OOM killer does not trigger for high-order
|
|
|
+ * ~__GFP_NOFAIL allocations so if no progress is being
|
|
|
+ * made, there are no other options and retrying is
|
|
|
+ * unlikely to help.
|
|
|
*/
|
|
|
- if (order > PAGE_ALLOC_COSTLY_ORDER)
|
|
|
+ if (order > PAGE_ALLOC_COSTLY_ORDER &&
|
|
|
+ !(gfp_mask & __GFP_NOFAIL))
|
|
|
goto nopage;
|
|
|
|
|
|
goto restart;
|