|
@@ -126,6 +126,12 @@ long vm_total_pages; /* The total number of pages which the VM controls */
|
|
|
static LIST_HEAD(shrinker_list);
|
|
|
static DECLARE_RWSEM(shrinker_rwsem);
|
|
|
|
|
|
+#ifdef CONFIG_CGROUP_MEM_CONT
|
|
|
+#define scan_global_lru(sc) (!(sc)->mem_cgroup)
|
|
|
+#else
|
|
|
+#define scan_global_lru(sc) (1)
|
|
|
+#endif
|
|
|
+
|
|
|
/*
|
|
|
* Add a shrinker callback to be called from the vm
|
|
|
*/
|
|
@@ -1280,11 +1286,12 @@ static unsigned long do_try_to_free_pages(struct zone **zones, gfp_t gfp_mask,
|
|
|
* Don't shrink slabs when reclaiming memory from
|
|
|
* over limit cgroups
|
|
|
*/
|
|
|
- if (sc->mem_cgroup == NULL)
|
|
|
+ if (scan_global_lru(sc)) {
|
|
|
shrink_slab(sc->nr_scanned, gfp_mask, lru_pages);
|
|
|
- if (reclaim_state) {
|
|
|
- nr_reclaimed += reclaim_state->reclaimed_slab;
|
|
|
- reclaim_state->reclaimed_slab = 0;
|
|
|
+ if (reclaim_state) {
|
|
|
+ nr_reclaimed += reclaim_state->reclaimed_slab;
|
|
|
+ reclaim_state->reclaimed_slab = 0;
|
|
|
+ }
|
|
|
}
|
|
|
total_scanned += sc->nr_scanned;
|
|
|
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,
|
|
|
congestion_wait(WRITE, HZ/10);
|
|
|
}
|
|
|
/* top priority shrink_caches still had more to do? don't OOM, then */
|
|
|
- if (!sc->all_unreclaimable && sc->mem_cgroup == NULL)
|
|
|
+ if (!sc->all_unreclaimable && scan_global_lru(sc))
|
|
|
ret = 1;
|
|
|
out:
|
|
|
/*
|