Re: [PATCH v2] mm/madvise: avoid skipping pages after splitting large folios
From: Lorenzo Stoakes (ARM)
Date: Thu Aug 06 2026 - 10:39:47 EST
On Thu, Aug 06, 2026 at 01:35:30PM +0200, David Hildenbrand (Arm) wrote:
> >
> > Let's at least split out the folio check into a helper to make things
> > clearer:
> >
> > static bool poison_splits_folio(const struct folio *folio)
> > {
> > /* Hugetlb is, as always, a world unto itself. */
> > if (folio_test_hugetlb(folio))
> > return false;
> > /* Soft-offline errors out, hwpoison traverse DAX intact. */
> > if (folio_is_zone_device(folio))
> > return false;
> > return true;
> > }
> >
> > Then for your patch:
> >
> > - size = PAGE_SIZE;
> > - if (folio_test_hugetlb(folio) || folio_is_zone_device(folio))
> > - size = folio_size(folio);
> > + size = poison_splits_folio(folio) ? PAGE_SIZE : folio_size(folio);
> >
> > I tried writing something that was neater and nicer but AI kept pointing
> > out how it was totally broken and I really really hate this code (not your
> > fault :).
>
> No, I don't think any such special casing on folios is the right way to handle it.
I mean the issue here is the stride varies depending on whether the thing is
hugetlb or not (and some weird DAX thing), and the poisoning causes a split
otherwise so if you want to poison a range you have to account for that.
But I agree there's something wrong here.
At first I thought 'handle at a folio granularity and assume folio slide' but
stupidly this code allows you to poison partial large folio ranges (I don't
think it should and given it's debug/testing crap I think it's fine to change
that).
But then maybe the answer is to change the interface in general? But at the same
time poisoning happens at a pfn level...
It's kinda weird to allow such an open-ended debug thing. I'd prefer we just
disallowed hugetlb, or did a split right away if THP or something.
Anyway hwpoison is a swamp of neglect and hackery regardless.
>
> --
> Cheers,
>
> David
--
Cheers, Lorenzo