diff options
author | KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> | 2008-02-07 03:14:29 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-07 11:42:21 -0500 |
commit | 91a45470f7ddc322073752e711a2e8dcbc339e6f (patch) | |
tree | 187e912a1245adf692600d4fd32d33ded15e671d /mm/vmscan.c | |
parent | df878fb04dea044378274d40d063279a9cb787fb (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/vmscan.c')
-rw-r--r-- | mm/vmscan.c | 17 |
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 */ | |||
126 | static LIST_HEAD(shrinker_list); | 126 | static LIST_HEAD(shrinker_list); |
127 | static DECLARE_RWSEM(shrinker_rwsem); | 127 | static 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; |
1316 | out: | 1323 | out: |
1317 | /* | 1324 | /* |