Re: [Bug Report] Elevated PMD nr_anon after running selftests

From: Nico Pache

Date: Fri Jun 12 2026 - 07:21:29 EST


On Thu, Jun 11, 2026 at 10:09 AM David Hildenbrand (Arm)
<david@xxxxxxxxxx> wrote:
>
> On 6/11/26 17:58, Nico Pache wrote:
> > Hi,
> >
> > While testing my mTHP code I noticed that mm selftests caused an accounting error in
> > /sys/kernel/mm/transparent_hugepage/hugepages-2048kB/stats/nr_anon
> >
> > At first I thought I might have caused a regression, but when retesting with 7.1-rc5 (without my code), the issue was still present.
> >
> > This issue occurs in two mm selftests:
> > 1) hmm test
> > 2) migration - private_anon_htlb test
> >
> > I spoke to David about this and he suggested the following diff which seems to have solved both issues.
> >
> > David would you like to send a formal patch or patches?
> >
> > Cheers,
> > -- Nico
> >
> > Diff for (1)
> >
> > diff --git a/mm/memremap.c b/mm/memremap.c
> > index 053842d45cb1..683a77dd679d 100644
> > --- a/mm/memremap.c
> > +++ b/mm/memremap.c
> > @@ -425,6 +425,7 @@ void free_zone_device_folio(struct folio *folio)
> > mem_cgroup_uncharge(folio);
> >
> > if (folio_test_anon(folio)) {
> > + mod_mthp_stat(folio_order(folio), MTHP_STAT_NR_ANON, -1);
> > for (i = 0; i < nr; i++)
> > __ClearPageAnonExclusive(folio_page(folio, i));
> > }
>
> Wasn't there another issue with hugetlb?
>
> diff --git a/mm/migrate.c b/mm/migrate.c
> index 8a64291ab5b4..0aec894266f2 100644
> --- a/mm/migrate.c
> +++ b/mm/migrate.c
> @@ -590,7 +590,8 @@ static int __folio_migrate_mapping(struct address_space
> *mapping,
> /* No turning back from here */
> newfolio->index = folio->index;
> newfolio->mapping = folio->mapping;
> - if (folio_test_anon(folio) && folio_test_large(folio))
> + if (folio_test_anon(folio) && folio_test_large(folio) &&
> + !folio_test_hugetlb(folio))
> mod_mthp_stat(folio_order(folio), MTHP_STAT_NR_ANON, 1);
> if (folio_test_swapbacked(folio))
> __folio_set_swapbacked(newfolio);
> @@ -623,7 +624,8 @@ static int __folio_migrate_mapping(struct address_space
> *mapping,
> */
> newfolio->index = folio->index;
> newfolio->mapping = folio->mapping;
> - if (folio_test_anon(folio) && folio_test_large(folio))
> + if (folio_test_anon(folio) && folio_test_large(folio) &&
> + !folio_test_hugetlb(folio))
> mod_mthp_stat(folio_order(folio), MTHP_STAT_NR_ANON, 1);
> folio_ref_add(newfolio, nr); /* add cache reference */
> if (folio_test_swapbacked(folio))
>
>
> Yeah, if you have some capacity, please send patches (and figure out Fixes:) :)

Yeah ill spend some time next week trying to understand why these are
happening and produce patches :)

>
>
> --
> Cheers,
>
> David
>