From bc3c73aa5390fcc5949cc8d3ef0e0b1da3b6cfa5 Mon Sep 17 00:00:00 2001 From: Mel Gorman Date: Thu, 12 Jan 2012 17:19:33 -0800 Subject: [PATCH] --- yaml --- r: 284400 b: refs/heads/master c: 7335084d446b83cbcb15da80497d03f0c1dc9e21 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/mm/vmscan.c | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index cc6c4b058efe..aa161c78bb3f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5013473152d1ac9d44d787fb02edda845fdf2cb3 +refs/heads/master: 7335084d446b83cbcb15da80497d03f0c1dc9e21 diff --git a/trunk/mm/vmscan.c b/trunk/mm/vmscan.c index 866ab27c52a5..cb68c53db4ec 100644 --- a/trunk/mm/vmscan.c +++ b/trunk/mm/vmscan.c @@ -2263,6 +2263,7 @@ static unsigned long do_try_to_free_pages(struct zonelist *zonelist, struct zoneref *z; struct zone *zone; unsigned long writeback_threshold; + bool should_abort_reclaim; get_mems_allowed(); delayacct_freepages_start(); @@ -2274,7 +2275,8 @@ static unsigned long do_try_to_free_pages(struct zonelist *zonelist, sc->nr_scanned = 0; if (!priority) disable_swap_token(sc->target_mem_cgroup); - if (shrink_zones(priority, zonelist, sc)) + should_abort_reclaim = shrink_zones(priority, zonelist, sc); + if (should_abort_reclaim) break; /* @@ -2342,6 +2344,10 @@ static unsigned long do_try_to_free_pages(struct zonelist *zonelist, if (oom_killer_disabled) return 0; + /* Aborting reclaim to try compaction? don't OOM, then */ + if (should_abort_reclaim) + return 1; + /* top priority shrink_zones still had more to do? don't OOM, then */ if (global_reclaim(sc) && !all_unreclaimable(zonelist, sc)) return 1;