Re: [PATCH v1 13/26] mm: mglru: prevent memory cgroup release in mglru

From: Qi Zheng

Date: Thu Nov 20 2025 - 08:39:25 EST




On 11/19/25 6:13 PM, Harry Yoo wrote:
On Tue, Oct 28, 2025 at 09:58:26PM +0800, Qi Zheng wrote:
From: Muchun Song <songmuchun@xxxxxxxxxxxxx>

In the near future, a folio will no longer pin its corresponding
memory cgroup. To ensure safety, it will only be appropriate to
hold the rcu read lock or acquire a reference to the memory cgroup
returned by folio_memcg(), thereby preventing it from being released.

In the current patch, the rcu read lock is employed to safeguard
against the release of the memory cgroup in mglru.

This serves as a preparatory measure for the reparenting of the
LRU pages.

Signed-off-by: Muchun Song <songmuchun@xxxxxxxxxxxxx>
Signed-off-by: Qi Zheng <zhengqi.arch@xxxxxxxxxxxxx>
---
mm/vmscan.c | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index 660cd40cfddd4..676e6270e5b45 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -4279,6 +4288,8 @@ bool lru_gen_look_around(struct page_vma_mapped_walk *pvmw)
arch_leave_lazy_mmu_mode();
+ rcu_read_unlock();
+
/* feedback from rmap walkers to page table walkers */
if (mm_state && suitable_to_scan(i, young))
update_bloom_filter(mm_state, max_seq, pvmw->pmd);

mm_state has the same life cycle as mem_cgroup. So it should be
protected by rcu read lock?

You are right. The mm_state is defined as follows:

struct lruvec {
struct lru_gen_mm_state mm_state;
};

will fix it in the next version.

Thanks,
Qi