Re: [PATCH v2 14/28] mm: mglru: prevent memory cgroup release in mglru
From: Qi Zheng
Date: Thu Dec 18 2025 - 02:04:35 EST
On 12/18/25 6:18 AM, Johannes Weiner wrote:
On Wed, Dec 17, 2025 at 03:27:38PM +0800, Qi Zheng wrote:
@@ -4242,6 +4244,13 @@ bool lru_gen_look_around(struct page_vma_mapped_walk *pvmw)
}
}
+ rcu_read_lock();
+ memcg = folio_memcg(folio);
+ lruvec = mem_cgroup_lruvec(memcg, pgdat);
+ max_seq = READ_ONCE((lruvec)->lrugen.max_seq);
+ gen = lru_gen_from_seq(max_seq);
+ mm_state = get_mm_state(lruvec);
+
arch_enter_lazy_mmu_mode();
pte -= (addr - start) / PAGE_SIZE;
@@ -4282,6 +4291,8 @@ bool lru_gen_look_around(struct page_vma_mapped_walk *pvmw)
if (mm_state && suitable_to_scan(i, young))
update_bloom_filter(mm_state, max_seq, pvmw->pmd);
+ rcu_read_unlock();
+
return true;
This seems a bit long to be holding the rcu lock.
Indeed.
Maybe do a get and a
put instead?
OK, will use get_mem_cgroup_from_folio(folio) to do this.
This way, #8 doesn't need to be folded into #27.