summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Hutchings <ben@decadent.org.uk>2012-12-27 19:39:54 +0100
committerBen Hutchings <ben@decadent.org.uk>2013-01-03 03:33:55 +0000
commit40686464a6c29b4d8f5ef1d6c86117022e46ecd1 (patch)
treee270f7300ad8dcf2508aa074ff6fb4800a60e501
parentfa1dd81ceffee58d0340a48c593ec5474e8e4f84 (diff)
Revert "mm: vmscan: fix endless loop in kswapd balancing"
This reverts commit 39d18dc4b8b0c000fa681cbae10ac3f8a132814b which was commit 60cefed485a02bd99b6299dad70666fe49245da7 upstream. This was not needed and is not suitable for 3.2.y. Reported-by: Johannes Weiner <hannes@cmpxchg.org> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
-rw-r--r--mm/vmscan.c27
1 files changed, 9 insertions, 18 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 1e4ee1acd2b7..313381cc88ac 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2492,19 +2492,6 @@ unsigned long try_to_free_mem_cgroup_pages(struct mem_cgroup *mem_cont,
}
#endif
-static bool zone_balanced(struct zone *zone, int order,
- unsigned long balance_gap, int classzone_idx)
-{
- if (!zone_watermark_ok_safe(zone, order, high_wmark_pages(zone) +
- balance_gap, classzone_idx, 0))
- return false;
-
- if (COMPACTION_BUILD && order && !compaction_suitable(zone, order))
- return false;
-
- return true;
-}
-
/*
* pgdat_balanced is used when checking if a node is balanced for high-order
* allocations. Only zones that meet watermarks and are in a zone allowed
@@ -2564,7 +2551,8 @@ static bool sleeping_prematurely(pg_data_t *pgdat, int order, long remaining,
continue;
}
- if (!zone_balanced(zone, order, 0, i))
+ if (!zone_watermark_ok_safe(zone, order, high_wmark_pages(zone),
+ i, 0))
all_zones_ok = false;
else
balanced += zone->present_pages;
@@ -2667,7 +2655,8 @@ loop_again:
shrink_active_list(SWAP_CLUSTER_MAX, zone,
&sc, priority, 0);
- if (!zone_balanced(zone, order, 0, 0)) {
+ if (!zone_watermark_ok_safe(zone, order,
+ high_wmark_pages(zone), 0, 0)) {
end_zone = i;
break;
} else {
@@ -2728,8 +2717,9 @@ loop_again:
(zone->present_pages +
KSWAPD_ZONE_BALANCE_GAP_RATIO-1) /
KSWAPD_ZONE_BALANCE_GAP_RATIO);
- if (!zone_balanced(zone, order,
- balance_gap, end_zone)) {
+ if (!zone_watermark_ok_safe(zone, order,
+ high_wmark_pages(zone) + balance_gap,
+ end_zone, 0)) {
shrink_zone(priority, zone, &sc);
reclaim_state->reclaimed_slab = 0;
@@ -2756,7 +2746,8 @@ loop_again:
continue;
}
- if (!zone_balanced(zone, order, 0, end_zone)) {
+ if (!zone_watermark_ok_safe(zone, order,
+ high_wmark_pages(zone), end_zone, 0)) {
all_zones_ok = 0;
/*
* We are still under min water mark. This