Re: [PATCH v2 10/28] writeback: prevent memory cgroup release in writeback module
From: Shakeel Butt
Date: Thu Dec 18 2025 - 21:30:30 EST
On Wed, Dec 17, 2025 at 03:27:34PM +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 function get_mem_cgroup_css_from_folio()
> and the rcu read lock are employed to safeguard against the release
> of the memory cgroup.
>
> 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>
> Reviewed-by: Harry Yoo <harry.yoo@xxxxxxxxxx>
> ---
[...]
> @@ -1549,9 +1549,14 @@ static inline void mem_cgroup_track_foreign_dirty(struct folio *folio,
> if (mem_cgroup_disabled())
> return;
>
> + if (!folio_memcg_charged(folio))
> + return;
> +
> + rcu_read_lock();
> memcg = folio_memcg(folio);
> - if (unlikely(memcg && &memcg->css != wb->memcg_css))
> + if (unlikely(&memcg->css != wb->memcg_css))
> mem_cgroup_track_foreign_dirty_slowpath(folio, wb);
The slowpath in the name gave me a pause but it seems like it is safe to
be called within rcu lock.
Acked-by: Shakeel Butt <shakeel.butt@xxxxxxxxx>