Re: [PATCH] mm: mglru: fix stale batch updates after memcg reparenting

From: Barry Song

Date: Mon Jun 22 2026 - 22:17:13 EST


On Tue, Jun 23, 2026 at 9:58 AM Qi Zheng <qi.zheng@xxxxxxxxx> wrote:
>
> Hi Barry,
>
> On 6/23/26 6:52 AM, Barry Song wrote:
> > On Mon, Jun 22, 2026 at 3:38 PM Qi Zheng <qi.zheng@xxxxxxxxx> wrote:
> >>
> >> From: Qi Zheng <zhengqi.arch@xxxxxxxxxxxxx>
> >>
> >> The mglru page table walker batches per-generation size deltas in
> >> walk->nr_pages while walking page tables without holding the lruvec lock.
> >> The reset_batch_size() later folds those deltas into walk->lruvec under
> >> the lruvec lock.
> >>
> >> The page table walker can run concurrently with the memcg reparenting path
> >> as follows:
> >>
> >> CPU0 CPU1
> >> ==== ====
> >>
> >> walk_mm
> >> --> walk_page_range
> >> --> update_batch_size
> >> --> walk->nr_pages += delta
> >>
> >> mem_cgroup_css_offline
> >> --> memcg_reparent_objcgs
> >> --> lock lruvec
> >> lru_gen_reparent_memcg
> >> --> reparent child folios to parent
> >> unlock lruvec
> >>
> >> lock lruvec
> >> reset_batch_size
> >> --> child lrugen->nr_pages += delta
> >>
> >> This can trigger the following warning:
> >>
> >> WARNING: mm/vmscan.c:5867 at lru_gen_exit_memcg+0x26f/0x300
> >> RIP: 0010:lru_gen_exit_memcg+0x26f/0x300 mm/vmscan.c:5867
> >
> > I can't find 5867; instead, I can find 5828:
> >
> > VM_WARN_ON_ONCE(memchr_inv(lruvec->lrugen.nr_pages, 0,
> > sizeof(lruvec->lrugen.nr_pages)));
> >
> > Is this the warning?
>
> Yes, I just copy-pasted the warning log from Peiyang's report.
>
> Maybe the description should be changed to:
>
> This will trigger the following warning in lru_gen_exit_memcg():
>
> VM_WARN_ON_ONCE(memchr_inv(lruvec->lrugen.nr_pages, 0,
> sizeof(lruvec->lrugen.nr_pages)));
>
> >

Yep. Can we update the v2 changelog accordingly?

Best Regards
Barry