The value of nr_reclaimed is the amount of pages reclaimed in the current round, whereas nr_to_reclaim shoud be compared with the amount of pages reclaimed in all rounds, so we have to buffer the pages reclaimed in the past rounds for correct comparison. Signed-off-by: Hillf Danton <dhillf@xxxxxxxxx> --- --- a/mm/vmscan.c Sat Jan 14 14:02:20 2012 +++ b/mm/vmscan.c Sat Jan 21 22:23:48 2012 @@ -2081,13 +2081,15 @@ static void shrink_mem_cgroup_zone(int p struct scan_control *sc) { unsigned long nr[NR_LRU_LISTS]; + unsigned long reclaimed = 0; unsigned long nr_to_scan; enum lru_list lru; - unsigned long nr_reclaimed, nr_scanned; + unsigned long nr_reclaimed = 0, nr_scanned; unsigned long nr_to_reclaim = sc->nr_to_reclaim; struct blk_plug plug; restart: + reclaimed += nr_reclaimed; nr_reclaimed = 0; nr_scanned = sc->nr_scanned; get_scan_count(mz, sc, nr, priority); @@ -2113,7 +2115,8 @@ restart: * with multiple processes reclaiming pages, the total * freeing target can get unreasonably large. */ - if (nr_reclaimed >= nr_to_reclaim && priority < DEF_PRIORITY) + if ((nr_reclaimed + reclaimed) >= nr_to_reclaim && + priority < DEF_PRIORITY) break; } blk_finish_plug(&plug); -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>