diff options
author | Paul Jackson <pj@sgi.com> | 2006-01-06 03:10:32 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-06 11:33:21 -0500 |
commit | 47f3a867f6310d6abfa185ab12baaba7ed1d69af (patch) | |
tree | 59e218a6d18c683bc3f3d86055d3df553a5acaed | |
parent | a576219aca70e6700705a9836e098dbecd25fb56 (diff) |
[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>
-rw-r--r-- | mm/page_alloc.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index fe14a8c87fc2..1e49dc7cd619 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -903,8 +903,7 @@ restart: | |||
903 | alloc_flags |= ALLOC_HARDER; | 903 | alloc_flags |= ALLOC_HARDER; |
904 | if (gfp_mask & __GFP_HIGH) | 904 | if (gfp_mask & __GFP_HIGH) |
905 | alloc_flags |= ALLOC_HIGH; | 905 | alloc_flags |= ALLOC_HIGH; |
906 | if (wait) | 906 | alloc_flags |= ALLOC_CPUSET; |
907 | alloc_flags |= ALLOC_CPUSET; | ||
908 | 907 | ||
909 | /* | 908 | /* |
910 | * Go through the zonelist again. Let __GFP_HIGH and allocations | 909 | * Go through the zonelist again. Let __GFP_HIGH and allocations |
@@ -926,7 +925,7 @@ restart: | |||
926 | nofail_alloc: | 925 | nofail_alloc: |
927 | /* go through the zonelist yet again, ignoring mins */ | 926 | /* go through the zonelist yet again, ignoring mins */ |
928 | page = get_page_from_freelist(gfp_mask, order, | 927 | page = get_page_from_freelist(gfp_mask, order, |
929 | zonelist, ALLOC_NO_WATERMARKS|ALLOC_CPUSET); | 928 | zonelist, ALLOC_NO_WATERMARKS); |
930 | if (page) | 929 | if (page) |
931 | goto got_pg; | 930 | goto got_pg; |
932 | if (gfp_mask & __GFP_NOFAIL) { | 931 | if (gfp_mask & __GFP_NOFAIL) { |