[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
|
@ -903,8 +903,7 @@ restart:
|
|||
alloc_flags |= ALLOC_HARDER;
|
||||
if (gfp_mask & __GFP_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
|
||||
|
@ -926,7 +925,7 @@ restart:
|
|||
nofail_alloc:
|
||||
/* go through the zonelist yet again, ignoring mins */
|
||||
page = get_page_from_freelist(gfp_mask, order,
|
||||
zonelist, ALLOC_NO_WATERMARKS|ALLOC_CPUSET);
|
||||
zonelist, ALLOC_NO_WATERMARKS);
|
||||
if (page)
|
||||
goto got_pg;
|
||||
if (gfp_mask & __GFP_NOFAIL) {
|
||||
|
|
Loading…
Reference in New Issue