Re: [PATCH] block: Remove special-casing of compound pages

Matthew Wilcox
2023-09-15T14:21:22Z

On Wed, Aug 16, 2023 at 01:27:17PM -0700, Hugh Dickins wrote:
> > This problem predates the folio work; it could for example have been
> > triggered by mmaping a THP in tmpfs and using that as the target of an
> > O_DIRECT read.
> >
> > Fixes: 800d8c63b2e98 ("shmem: add huge pages support")
>
> No. It's a good catch, but bug looks specific to the folio work to me.
>
> Almost all shmem pages are dirty from birth, even as soon as they are
> brought back from swap; so it is not necessary to re-mark them dirty.
>
> The exceptions are pages allocated to holes when faulted: so you did
> get me worried as to whether khugepaged could collapse a pmd-ful of
> those into a THP without marking the result as dirty.
>
> But no, in v6.5-rc6 the collapse_file() success path has
> if (is_shmem)
> folio_mark_dirty(folio);
> and in v5.10 the same appears as
> if (is_shmem)
> set_page_dirty(new_page);
>
> (IIRC, that or marking pmd dirty was missed from early shmem THP
> support, but fairly soon corrected, and backported to stable then.
> I have a faint memory of versions which assembled pmd_dirty from
> collected pte_dirtys.)
>
> And the !is_shmem case is for CONFIG_READ_ONLY_THP_FOR_FS: writing
> into those pages, by direct IO or whatever, is already prohibited.
>
> It's dem dirty (or not dirty) folios dat's the trouble!

Thanks for the correction! Could it happen with anon THP?
They're not kept dirty from birth ... are they?