The upstream change reverts the other change as listed below: commit d1908362ae0b97374eb8328fbb471576332f9fb1 Author: Minchan Kim <minchan.kim@xxxxxxxxx> Date: Wed Sep 22 13:05:01 2010 -0700 vmscan: check all_unreclaimable in direct reclaim path The zone->all_unreclaimable flag is set by kswapd by checking zone->pages_scanned in zone_reclaimable(). It is possible to have zone->all_unreclaimable == false while the zone is actually unreclaimable, and it will cause machine to stuck. 1. while kswapd in reclaim priority loop, someone frees a page on the zone. It will end up resetting the pages_scanned. 2. kswapd is frozen for whatever reason. This happens in hibernation where we are not interested in google. Especially we need to keep Minchan's patch after the softlimit reclaim support. On a system which over-commit the softlimit, it is easily to make the system hang w/o it. Signed-off-by: Ying Han <yinghan@xxxxxxxxxx> --- mm/vmscan.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index 5d036f5..65febc1 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -2318,6 +2318,7 @@ static bool all_unreclaimable(struct zonelist *zonelist, { struct zoneref *z; struct zone *zone; + bool all_unreclaimable = true; for_each_zone_zonelist_nodemask(zone, z, zonelist, gfp_zone(sc->gfp_mask), sc->nodemask) { @@ -2325,11 +2326,13 @@ static bool all_unreclaimable(struct zonelist *zonelist, continue; if (!cpuset_zone_allowed_hardwall(zone, GFP_KERNEL)) continue; - if (!zone->all_unreclaimable) - return false; + if (zone_reclaimable(zone)) { + all_unreclaimable = false; + break; + } } - return true; + return all_unreclaimable; } /* -- 1.7.7.3 -- 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>