On Tue, Oct 25, 2011 at 11:24 PM, David Rientjes <rientjes@xxxxxxxxxx> wrote: > On Tue, 25 Oct 2011, Colin Cross wrote: > >> > Or, rather, when pm_restrict_gfp_mask() clears __GFP_IO and __GFP_FS that >> > it also has the same behavior as __GFP_NORETRY in should_alloc_retry() by >> > setting a variable in file scope. >> > >> >> Why do you prefer that over adding a gfp_required_mask? >> > > Because it avoids an unnecessary OR in the page and slab allocator > fastpaths which are red hot :) > Makes sense. What about this? Official patch to follow. diff --git a/mm/page_alloc.c b/mm/page_alloc.c index fef8dc3..59cd4ff 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1786,6 +1786,13 @@ should_alloc_retry(gfp_t gfp_mask, unsigned int order, return 0; /* + * If PM has disabled I/O, OOM is disabled and reclaim is unlikely + * to make any progress. To prevent a livelock, don't retry. + */ + if (!(gfp_allowed_mask & __GFP_FS)) + return 0; + + /* * In this implementation, order <= PAGE_ALLOC_COSTLY_ORDER * means __GFP_NOFAIL, but that may not be true in other * implementations. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>