aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Jackson <pj@sgi.com>2006-01-06 03:10:32 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-01-06 11:33:21 -0500
commit47f3a867f6310d6abfa185ab12baaba7ed1d69af (patch)
tree59e218a6d18c683bc3f3d86055d3df553a5acaed
parenta576219aca70e6700705a9836e098dbecd25fb56 (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.c5
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:
926nofail_alloc: 925nofail_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) {