[PATCH RFC 07/15] mm/mglru: move refault workingset activation into lru_gen_refault
Kairui Song <[email protected]> Tue, 04 Aug 2026 03:47:03 +0800
| Newsgroups | org.kernel.feeds.b4-sent,org.kernel.vger.cgroups,org.kernel.vger.linux-kernel,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
Move the folio_set_active() for refaulted workingset folios from
folio_add_lru() into lru_gen_refault(), where the refault detection
already happens. No functional change: the ordering and logic are
preserved in all cases, and no other paths reach the removed branch.
This is a preparatory cleanup for MGLRU-FG.
---
mm/folio.c | 6 +-----
mm/workingset.c | 9 ++++-----
2 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/mm/folio.c b/mm/folio.c
index f90b7f86dbe3..fab00cb02970 100644
--- a/mm/folio.c
+++ b/mm/folio.c
@@ -474,17 +474,13 @@ void folio_add_lru(struct folio *folio)
VM_BUG_ON_FOLIO(folio_test_lru(folio), folio);
/*
- * For refaulted workingset folios, set PG_active so they
- * can be added to active generations.
* For prefaulted file folios, folio_mark_accessed() sets
* PG_referenced so lru_gen_folio_seq() places them into
* the second oldest generation.
*/
if (lru_gen_enabled() && !folio_test_unevictable(folio) &&
lru_gen_in_fault() && !(current->flags & PF_MEMALLOC)) {
- if (folio_test_workingset(folio))
- folio_set_active(folio);
- else if (!folio_test_referenced(folio))
+ if (!folio_test_referenced(folio) && !folio_test_workingset(folio))
folio_mark_accessed(folio);
}
diff --git a/mm/workingset.c b/mm/workingset.c
index 7ac2b88c80ae..5438e9390011 100644
--- a/mm/workingset.c
+++ b/mm/workingset.c
@@ -320,12 +320,11 @@ static void lru_gen_refault(struct folio *folio, void *shadow)
atomic_long_add(delta, &lrugen->refaulted[hist][type][tier]);
if (workingset) {
- /*
- * see folio_add_lru(), where folio_set_active() is
- * called for workingset folios
- */
- if (lru_gen_in_fault())
+ /* Send refaulted workingset folios to active generations. */
+ if (lru_gen_in_fault()) {
+ folio_set_active(folio);
mod_lruvec_state(lruvec, WORKINGSET_ACTIVATE_BASE + type, delta);
+ }
folio_set_workingset(folio);
mod_lruvec_state(lruvec, WORKINGSET_RESTORE_BASE + type, delta);
} else
--
2.55.0