linux-2.6-npiggin/mm/vmscan.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff -puN mm/vmscan.c~vm-fix-all_zones_ok mm/vmscan.c --- linux-2.6/mm/vmscan.c~vm-fix-all_zones_ok 2004-02-23 19:44:06.000000000 +1100 +++ linux-2.6-npiggin/mm/vmscan.c 2004-02-23 19:45:10.000000000 +1100 @@ -1008,10 +1008,12 @@ static int balance_pgdat(pg_data_t *pgda if (nr_pages) /* Software suspend */ to_reclaim = min(to_free, SWAP_CLUSTER_MAX*8); - else /* Zone balancing */ + else { /* Zone balancing */ to_reclaim = zone->reclaim_batch; + if (zone->pages_high < zone->free_pages) + all_zones_ok = 0; + } - all_zones_ok = 0; zone->temp_priority = priority; reclaimed = shrink_zone(zone, GFP_KERNEL, to_reclaim, &nr_scanned, ps, priority); _