Messages in this thread Patch in this message | | | Date | Tue, 25 Oct 2011 23:26:40 -0700 | Subject | Re: [PATCH] mm: avoid livelock on !__GFP_FS allocations | From | Colin Cross <> |
| |
On Tue, Oct 25, 2011 at 11:24 PM, David Rientjes <rientjes@google.com> 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.
| |