Messages in this thread Patch in this message | | | Subject | [PATCH RFC] mm: reset pages_scanned only when free pages are above high watermark | From | Konstantin Khlebnikov <> | Date | Wed, 11 Mar 2015 21:30:23 +0300 |
| |
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 <khlebnikov@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) ||
| |