When split_huge_page_to_list() fails, and a huge page is going back to LRU, the number of isolated pages is decreasing. So we must subtract HPAGE_PMD_NR from NR_ISOLATED_ANON counter, not to add it.
Otherwise, we may bumped into a situation, when number of isolated pages grows up to number of inactive pages, and direct reclaim hangs in: shrink_inactive_list() while (too_many_isolated()) congestion_wait(BLK_RW_ASYNC, HZ/10), waiting for the counter becomes less. But it has no a chance to finish, and hangs forever. Fix that. https://jira.sw.ru/browse/PSBM-76970 Signed-off-by: Kirill Tkhai <ktk...@virtuozzo.com> --- mm/memcontrol.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index a7fa84a9980..a165a221e87 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4963,7 +4963,7 @@ static long memcg_numa_isolate_pages(struct lruvec *lruvec, enum lru_list lru, if (PageTransHuge(page) && split_huge_page_to_list(page, dst)) { list_del(&page->lru); mod_zone_page_state(zone, NR_ISOLATED_ANON, - HPAGE_PMD_NR); + -HPAGE_PMD_NR); putback_lru_page(page); } } _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel