[RFC PATCH v2 4/5] mm/vmscan: let kswapd scan minimum-generation lruvecs

From: Ehab Ababneh

Date: Fri Oct 09 2026 - 16:35:30 EST


When an lruvec has only MIN_NR_GENS generations, scan_folios()
returns without scanning that type. Let kswapd scan the oldest
generation while keeping the early return for other reclaimers.

Under memory pressure, an lruvec can end up with only two generations.
That leaves an older and a younger cohort, a bit like inactive and
active LRU lists, though MGLRU tracks age differently.

This is a diagnostic change to see whether kswapd can reclaim from
the oldest remaining generation when aging does not advance.

Signed-off-by: Ehab Ababneh <ehab.ababneh@xxxxxxxxx>
---
mm/vmscan.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index 95cf20183efc..9e051aac2203 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -5017,7 +5017,7 @@ static int scan_folios(unsigned long nr_to_scan, struct lruvec *lruvec,
VM_WARN_ON_ONCE(nr_to_scan > MAX_LRU_BATCH);
VM_WARN_ON_ONCE(!list_empty(list));

- if (get_nr_gens(lruvec, type) == MIN_NR_GENS)
+ if (!current_is_kswapd() && get_nr_gens(lruvec, type) == MIN_NR_GENS)
return 0;

gen = lru_gen_from_seq(lrugen->min_seq[type]);
--
2.43.0