diff --git a/[refs] b/[refs] index 62d649384095..6a69762b2b40 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8691f3a72f32f8b3ed535faa27140b3ae293c90b +refs/heads/master: 32a4330d4156e55a4888a201f484dbafed9504ed diff --git a/trunk/mm/vmscan.c b/trunk/mm/vmscan.c index a6e65d024995..bc58802663be 100644 --- a/trunk/mm/vmscan.c +++ b/trunk/mm/vmscan.c @@ -1371,7 +1371,13 @@ static unsigned long balance_pgdat(pg_data_t *pgdat, int order) temp_priority[i] = priority; sc.nr_scanned = 0; note_zone_scanning_priority(zone, priority); - nr_reclaimed += shrink_zone(priority, zone, &sc); + /* + * We put equal pressure on every zone, unless one + * zone has way too many pages free already. + */ + if (!zone_watermark_ok(zone, order, 8*zone->pages_high, + end_zone, 0)) + nr_reclaimed += shrink_zone(priority, zone, &sc); reclaim_state->reclaimed_slab = 0; nr_slab = shrink_slab(sc.nr_scanned, GFP_KERNEL, lru_pages);