aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>2008-02-07 03:14:29 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2008-02-07 11:42:21 -0500
commit91a45470f7ddc322073752e711a2e8dcbc339e6f (patch)
tree187e912a1245adf692600d4fd32d33ded15e671d /mm
parentdf878fb04dea044378274d40d063279a9cb787fb (diff)
per-zone and reclaim enhancements for memory controller: add scan_global_lru macro
This is used to detect which scan_control scans global lru or mem_cgroup lru. And compiled to be static value (1) when memory controller is not configured. This may make the meaning obvious. Acked-by: Balbir Singh <balbir@linux.vnet.ibm.com> Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Cc: David Rientjes <rientjes@google.com> Cc: Herbert Poetzl <herbert@13thfloor.at> Cc: Kirill Korotaev <dev@sw.ru> Cc: Nick Piggin <nickpiggin@yahoo.com.au> Cc: Paul Menage <menage@google.com> Cc: Pavel Emelianov <xemul@openvz.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> Cc: Rik van Riel <riel@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/vmscan.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 159e6c760d83..be4dfe87be03 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -126,6 +126,12 @@ long vm_total_pages; /* The total number of pages which the VM controls */
126static LIST_HEAD(shrinker_list); 126static LIST_HEAD(shrinker_list);
127static DECLARE_RWSEM(shrinker_rwsem); 127static DECLARE_RWSEM(shrinker_rwsem);
128 128
129#ifdef CONFIG_CGROUP_MEM_CONT
130#define scan_global_lru(sc) (!(sc)->mem_cgroup)
131#else
132#define scan_global_lru(sc) (1)
133#endif
134
129/* 135/*
130 * Add a shrinker callback to be called from the vm 136 * Add a shrinker callback to be called from the vm
131 */ 137 */
@@ -1280,11 +1286,12 @@ static unsigned long do_try_to_free_pages(struct zone **zones, gfp_t gfp_mask,
1280 * Don't shrink slabs when reclaiming memory from 1286 * Don't shrink slabs when reclaiming memory from
1281 * over limit cgroups 1287 * over limit cgroups
1282 */ 1288 */
1283 if (sc->mem_cgroup == NULL) 1289 if (scan_global_lru(sc)) {
1284 shrink_slab(sc->nr_scanned, gfp_mask, lru_pages); 1290 shrink_slab(sc->nr_scanned, gfp_mask, lru_pages);
1285 if (reclaim_state) { 1291 if (reclaim_state) {
1286 nr_reclaimed += reclaim_state->reclaimed_slab; 1292 nr_reclaimed += reclaim_state->reclaimed_slab;
1287 reclaim_state->reclaimed_slab = 0; 1293 reclaim_state->reclaimed_slab = 0;
1294 }
1288 } 1295 }
1289 total_scanned += sc->nr_scanned; 1296 total_scanned += sc->nr_scanned;
1290 if (nr_reclaimed >= sc->swap_cluster_max) { 1297 if (nr_reclaimed >= sc->swap_cluster_max) {
@@ -1311,7 +1318,7 @@ static unsigned long do_try_to_free_pages(struct zone **zones, gfp_t gfp_mask,
1311 congestion_wait(WRITE, HZ/10); 1318 congestion_wait(WRITE, HZ/10);
1312 } 1319 }
1313 /* top priority shrink_caches still had more to do? don't OOM, then */ 1320 /* top priority shrink_caches still had more to do? don't OOM, then */
1314 if (!sc->all_unreclaimable && sc->mem_cgroup == NULL) 1321 if (!sc->all_unreclaimable && scan_global_lru(sc))
1315 ret = 1; 1322 ret = 1;
1316out: 1323out:
1317 /* 1324 /*