[RFC PATCH 1/3] mm: avoid unnecessary lru drain for wp_can_reuse_anon_folio()

From: Barry Song (Xiaomi)

Date: Thu Jun 11 2026 - 06:51:46 EST


We always unconditionally drain the LRU before retrying anon folio
reuse in wp_can_reuse_anon_folio(). Instead, assume !LRU anon folios
are in lru_cache, and use the refcount to avoid many unnecessary LRU
drains.

Signed-off-by: Barry Song (Xiaomi) <baohua@xxxxxxxxxx>
---
mm/memory.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/mm/memory.c b/mm/memory.c
index 56be920c56d7..487a34377a7b 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -4193,12 +4193,18 @@ static bool wp_can_reuse_anon_folio(struct folio *folio,
*/
if (folio_test_ksm(folio) || folio_ref_count(folio) > 3)
return false;
- if (!folio_test_lru(folio))
+ if (!folio_test_lru(folio)) {
+ /*
+ * Assume folio is on lru_cache and holds a cache reference.
+ */
+ if (folio_ref_count(folio) > 2 + folio_test_swapcache(folio))
+ return false;
/*
* We cannot easily detect+handle references from
* remote LRU caches or references to LRU folios.
*/
lru_add_drain();
+ }
if (folio_ref_count(folio) > 1 + folio_test_swapcache(folio))
return false;
if (!folio_trylock(folio))
--
2.39.3 (Apple Git-146)