On Wed, Nov 02, 2022 at 03:02:35PM -0400, Peter Xu wrote: > Does the patch attached look reasonable to you? Mmm, no. If the page is in the swap cache, this will be "true". > diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c > index 3d0fef3980b3..650ab6cfd5f4 100644 > --- a/mm/userfaultfd.c > +++ b/mm/userfaultfd.c > @@ -64,7 +64,7 @@ int mfill_atomic_install_pte(struct mm_struct *dst_mm, pmd_t *dst_pmd, > pte_t _dst_pte, *dst_pte; > bool writable = dst_vma->vm_flags & VM_WRITE; > bool vm_shared = dst_vma->vm_flags & VM_SHARED; > - bool page_in_cache = page->mapping; > + bool page_in_cache = page_mapping(page); We could do: struct page *head = compound_head(page); bool page_in_cache = head->mapping && !PageMappingFlags(head);