aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKOSAKI Motohiro <[email protected]>2010-01-15 17:01:25 -0800
committerLinus Torvalds <[email protected]>2010-01-16 12:15:39 -0800
commitde3fab39348dff18c69a0cd04efee9c276a02f51 (patch)
tree1fc5a20da15541e23d02c33ae0bb574fb1f2e40f
parentaf2422c42c0ff42b8b93dbb3a5fe65250fb65c40 (diff)
vmscan: kswapd: don't retry balance_pgdat() if all zones are unreclaimable
Commit f50de2d3 (vmscan: have kswapd sleep for a short interval and double check it should be asleep) can cause kswapd to enter an infinite loop if running on a single-CPU system. If all zones are unreclaimble, sleeping_prematurely return 1 and kswapd will call balance_pgdat() again. but it's totally meaningless, balance_pgdat() doesn't anything against unreclaimable zone! Signed-off-by: KOSAKI Motohiro <[email protected]> Cc: Mel Gorman <[email protected]> Reported-by: Will Newton <[email protected]> Reviewed-by: Minchan Kim <[email protected]> Reviewed-by: Rik van Riel <[email protected]> Tested-by: Will Newton <[email protected]> Reviewed-by: Wu Fengguang <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
-rw-r--r--mm/vmscan.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 885207a6b6b7..c26986c85ce0 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1922,6 +1922,9 @@ static int sleeping_prematurely(pg_data_t *pgdat, int order, long remaining)
if (!populated_zone(zone))
continue;
+ if (zone_is_all_unreclaimable(zone))
+ continue;
+
if (!zone_watermark_ok(zone, order, high_wmark_pages(zone),
0, 0))
return 1;