On Tue, Aug 05, 2025 at 05:11:49PM -0700, Boris Burkov wrote: > If cgroups are configured into the kernel, then uncharged pages can only > come from filemap_add_folio_nocharge. Track such uncharged folios in > vmstat so that they are accounted for. > > Suggested-by: Shakeel Butt <shakeel.butt@xxxxxxxxx> > Signed-off-by: Boris Burkov <boris@xxxxxx> > --- > include/linux/mmzone.h | 3 +++ > mm/filemap.c | 18 ++++++++++++++++++ > mm/vmstat.c | 3 +++ > 3 files changed, 24 insertions(+) > > diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h > index 283913d42d7b..a945dec65371 100644 > --- a/include/linux/mmzone.h > +++ b/include/linux/mmzone.h > @@ -241,6 +241,9 @@ enum node_stat_item { > NR_HUGETLB, > #endif > NR_BALLOON_PAGES, > +#ifdef CONFIG_MEMCG > + NR_UNCHARGED_FILE_PAGES, > +#endif > NR_VM_NODE_STAT_ITEMS > }; > > diff --git a/mm/filemap.c b/mm/filemap.c > index ccc9cfb4d418..0a258b4a9246 100644 > --- a/mm/filemap.c > +++ b/mm/filemap.c > @@ -146,6 +146,22 @@ static void page_cache_delete(struct address_space *mapping, > mapping->nrpages -= nr; > } > > +#ifdef CONFIG_MEMCG > +static void filemap_mod_uncharged_vmstat(struct folio *folio, int sign) > +{ > + long nr = folio_nr_pages(folio) * sign; > + > + if (!folio_memcg(folio)) > + __lruvec_stat_mod_folio(folio, NR_UNCHARGED_FILE_PAGES, nr);