[PATCH] mm: fix __alloc_pages cpuset ALLOC_* flags
Two changes to the setting of the ALLOC_CPUSET flag in mm/page_alloc.c:__alloc_pages() - A bug fix - the "ignoring mins" case should not be honoring ALLOC_CPUSET. This case of all cases, since it is handling a request that will free up more memory than is asked for (exiting tasks, e.g.) should be allowed to escape cpuset constraints when memory is tight. - A logic change to make it simpler. Honor cpusets even on GFP_ATOMIC (!wait) requests. With this, cpuset confinement applies to all requests except ALLOC_NO_WATERMARKS, so that in a subsequent cleanup patch, I can remove the ALLOC_CPUSET flag entirely. Since I don't know any real reason this logic has to be either way, I am choosing the path of the simplest code. Signed-off-by: Paul Jackson <pj@sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
a576219aca
commit
47f3a867f6
1 changed files with 2 additions and 3 deletions
|
@ -903,8 +903,7 @@ __alloc_pages(gfp_t gfp_mask, unsigned int order,
|
||||||
alloc_flags |= ALLOC_HARDER;
|
alloc_flags |= ALLOC_HARDER;
|
||||||
if (gfp_mask & __GFP_HIGH)
|
if (gfp_mask & __GFP_HIGH)
|
||||||
alloc_flags |= ALLOC_HIGH;
|
alloc_flags |= ALLOC_HIGH;
|
||||||
if (wait)
|
alloc_flags |= ALLOC_CPUSET;
|
||||||
alloc_flags |= ALLOC_CPUSET;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Go through the zonelist again. Let __GFP_HIGH and allocations
|
* Go through the zonelist again. Let __GFP_HIGH and allocations
|
||||||
|
@ -926,7 +925,7 @@ __alloc_pages(gfp_t gfp_mask, unsigned int order,
|
||||||
nofail_alloc:
|
nofail_alloc:
|
||||||
/* go through the zonelist yet again, ignoring mins */
|
/* go through the zonelist yet again, ignoring mins */
|
||||||
page = get_page_from_freelist(gfp_mask, order,
|
page = get_page_from_freelist(gfp_mask, order,
|
||||||
zonelist, ALLOC_NO_WATERMARKS|ALLOC_CPUSET);
|
zonelist, ALLOC_NO_WATERMARKS);
|
||||||
if (page)
|
if (page)
|
||||||
goto got_pg;
|
goto got_pg;
|
||||||
if (gfp_mask & __GFP_NOFAIL) {
|
if (gfp_mask & __GFP_NOFAIL) {
|
||||||
|
|
Loading…
Reference in a new issue