diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/vmscan.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c index f51a33e8ed89..7e0f05797388 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -2125,6 +2125,22 @@ static void shrink_zones(int priority, struct zonelist *zonelist, | |||
2125 | continue; | 2125 | continue; |
2126 | if (zone->all_unreclaimable && priority != DEF_PRIORITY) | 2126 | if (zone->all_unreclaimable && priority != DEF_PRIORITY) |
2127 | continue; /* Let kswapd poll it */ | 2127 | continue; /* Let kswapd poll it */ |
2128 | if (COMPACTION_BUILD) { | ||
2129 | /* | ||
2130 | * If we already have plenty of memory | ||
2131 | * free for compaction, don't free any | ||
2132 | * more. Even though compaction is | ||
2133 | * invoked for any non-zero order, | ||
2134 | * only frequent costly order | ||
2135 | * reclamation is disruptive enough to | ||
2136 | * become a noticable problem, like | ||
2137 | * transparent huge page allocations. | ||
2138 | */ | ||
2139 | if (sc->order > PAGE_ALLOC_COSTLY_ORDER && | ||
2140 | (compaction_suitable(zone, sc->order) || | ||
2141 | compaction_deferred(zone))) | ||
2142 | continue; | ||
2143 | } | ||
2128 | /* | 2144 | /* |
2129 | * This steals pages from memory cgroups over softlimit | 2145 | * This steals pages from memory cgroups over softlimit |
2130 | * and returns the number of reclaimed pages and | 2146 | * and returns the number of reclaimed pages and |