diff options
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 7f79b78bc829..0b9f577b1a2a 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -2170,6 +2170,18 @@ static inline void boost_watermark(struct zone *zone) | |||
2170 | 2170 | ||
2171 | max_boost = mult_frac(zone->_watermark[WMARK_HIGH], | 2171 | max_boost = mult_frac(zone->_watermark[WMARK_HIGH], |
2172 | watermark_boost_factor, 10000); | 2172 | watermark_boost_factor, 10000); |
2173 | |||
2174 | /* | ||
2175 | * high watermark may be uninitialised if fragmentation occurs | ||
2176 | * very early in boot so do not boost. We do not fall | ||
2177 | * through and boost by pageblock_nr_pages as failing | ||
2178 | * allocations that early means that reclaim is not going | ||
2179 | * to help and it may even be impossible to reclaim the | ||
2180 | * boosted watermark resulting in a hang. | ||
2181 | */ | ||
2182 | if (!max_boost) | ||
2183 | return; | ||
2184 | |||
2173 | max_boost = max(pageblock_nr_pages, max_boost); | 2185 | max_boost = max(pageblock_nr_pages, max_boost); |
2174 | 2186 | ||
2175 | zone->watermark_boost = min(zone->watermark_boost + pageblock_nr_pages, | 2187 | zone->watermark_boost = min(zone->watermark_boost + pageblock_nr_pages, |