Technically, this counter works as OOM-countdown. Let's reset it only when zone is completely recovered and ready to handle any allocations. Otherwise system could never recover and stuck in livelock.
Signed-off-by: Konstantin Khlebnikov <khlebni...@yandex-team.ru> --- mm/page_alloc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index ffd5ad2a6e10..ef7795c8c121 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -701,7 +701,8 @@ static void free_pcppages_bulk(struct zone *zone, int count, spin_lock(&zone->lock); nr_scanned = zone_page_state(zone, NR_PAGES_SCANNED); - if (nr_scanned) + if (nr_scanned && + zone_page_state(zone, NR_FREE_PAGES) > high_wmark_pages(zone)) __mod_zone_page_state(zone, NR_PAGES_SCANNED, -nr_scanned); while (to_free) { @@ -752,7 +753,8 @@ static void free_one_page(struct zone *zone, unsigned long nr_scanned; spin_lock(&zone->lock); nr_scanned = zone_page_state(zone, NR_PAGES_SCANNED); - if (nr_scanned) + if (nr_scanned && + zone_page_state(zone, NR_FREE_PAGES) > high_wmark_pages(zone)) __mod_zone_page_state(zone, NR_PAGES_SCANNED, -nr_scanned); if (unlikely(has_isolate_pageblock(zone) || -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/