From 7a4765b9efbff731c25cf955bd7fc59af17e465c Mon Sep 17 00:00:00 2001 From: "Kirill A. Shutemov" Date: Thu, 29 Oct 2020 21:04:30 +0800 Subject: [PATCH] khugepaged: drain all LRU caches before scanning pages mainline inclusion from mainline-v5.8-rc1 commit a980df33e9351e5474c06ec0fd96b2f409e2ff22 category: bugfix bugzilla: 36242 CVE: NA ------------------------------------------------- Having a page in LRU add cache offsets page refcount and gives false-negative on PageLRU(). It reduces collapse success rate. Drain all LRU add caches before scanning. It happens relatively rare and should not disturb the system too much. Signed-off-by: Kirill A. Shutemov Signed-off-by: Andrew Morton Tested-by: Zi Yan Reviewed-by: William Kucharski Reviewed-by: Zi Yan Acked-by: Yang Shi Cc: Andrea Arcangeli Cc: John Hubbard Cc: Mike Kravetz Cc: Ralph Campbell Link: http://lkml.kernel.org/r/20200416160026.16538-4-kirill.shutemov@linux.intel.com Signed-off-by: Linus Torvalds Signed-off-by: Liu Shixin Reviewed-by: Kefeng Wang Signed-off-by: Yang Yingliang --- mm/khugepaged.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 72e7abeb8772..a31028773e13 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1832,6 +1832,8 @@ static void khugepaged_do_scan(void) barrier(); /* write khugepaged_pages_to_scan to local stack */ + lru_add_drain_all(); + while (progress < pages) { if (!khugepaged_prealloc_page(&hpage, &wait)) break; -- GitLab