On Wed, 25 Feb 2015, Michal Hocko wrote: > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > index 2d224bbdf8e8..c2ff40a30003 100644 > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -2363,7 +2363,8 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int > order, > goto out; > } > /* Exhausted what can be done so it's blamo time */ > - if (out_of_memory(ac->zonelist, gfp_mask, order, ac->nodemask, false)) > + if (out_of_memory(ac->zonelist, gfp_mask, order, ac->nodemask, false) > + || WARN_ON_ONCE(gfp_mask & __GFP_NOFAIL)) > *did_some_progress = 1; > out: > oom_zonelist_unlock(ac->zonelist, gfp_mask);
Eek, not sure we actually need to play any games with did_some_progress, it might be clearer just to do this diff --git a/mm/page_alloc.c b/mm/page_alloc.c --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2760,7 +2760,7 @@ retry: &did_some_progress); if (page) goto got_pg; - if (!did_some_progress) + if (!did_some_progress && !(gfp_mask & __GFP_NOFAIL)) goto nopage; } /* Wait for some write requests to complete then retry */ Either way you decide, feel free to add my Acked-by: David Rientjes <rient...@gooogle.com> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/