diff options
author | KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> | 2008-02-07 03:14:14 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-07 11:42:20 -0500 |
commit | 417eead30434b4bd09a54455e839cf9a62c05460 (patch) | |
tree | 138ed49bab9cf21579ffff98a9d428fbabe74fc8 /mm/vmscan.c | |
parent | fa1de9008c9bcce8ab5122529dd19b24c273eba2 (diff) |
memory cgroup enhancements: fix zone handling in try_to_free_mem_cgroup_page
Because NODE_DATA(node)->node_zonelists[] is guaranteed to contain all
necessary zones, it is not necessary to use for_each_online_node.
And this for_each_online_node() makes reclaim routine start always
from node 0. This is not good. This patch makes reclaim start from
caller's node and just use usual (default) zonelist order.
[akpm@linux-foundation.org: fix warning]
Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Balbir Singh <balbir@linux.vnet.ibm.com>
Cc: Pavel Emelianov <xemul@openvz.org>
Cc: Paul Menage <menage@google.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: Kirill Korotaev <dev@sw.ru>
Cc: Herbert Poetzl <herbert@13thfloor.at>
Cc: David Rientjes <rientjes@google.com>
Cc: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r-- | mm/vmscan.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index 1b85217b528c..159e6c760d83 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -1365,15 +1365,12 @@ unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem_cont, | |||
1365 | .mem_cgroup = mem_cont, | 1365 | .mem_cgroup = mem_cont, |
1366 | .isolate_pages = mem_cgroup_isolate_pages, | 1366 | .isolate_pages = mem_cgroup_isolate_pages, |
1367 | }; | 1367 | }; |
1368 | int node; | ||
1369 | struct zone **zones; | 1368 | struct zone **zones; |
1370 | int target_zone = gfp_zone(GFP_HIGHUSER_MOVABLE); | 1369 | int target_zone = gfp_zone(GFP_HIGHUSER_MOVABLE); |
1371 | 1370 | ||
1372 | for_each_online_node(node) { | 1371 | zones = NODE_DATA(numa_node_id())->node_zonelists[target_zone].zones; |
1373 | zones = NODE_DATA(node)->node_zonelists[target_zone].zones; | 1372 | if (do_try_to_free_pages(zones, sc.gfp_mask, &sc)) |
1374 | if (do_try_to_free_pages(zones, sc.gfp_mask, &sc)) | 1373 | return 1; |
1375 | return 1; | ||
1376 | } | ||
1377 | return 0; | 1374 | return 0; |
1378 | } | 1375 | } |
1379 | #endif | 1376 | #endif |