On Mon, Jul 19, 2021 at 09:21:18PM +0200, David Hildenbrand wrote:
Hi Peter,
Hi, David,
I just stumbled over copy_page_range() optimization
/*
* Don't copy ptes where a page fault will fill them correctly.
* Fork becomes much lighter when there are big shared or private
* readonly mappings. The tradeoff is that copy_page_range is more
* efficient than faulting.
*/
if (!(src_vma->vm_flags & (VM_HUGETLB | VM_PFNMAP | VM_MIXEDMAP)) &&
!src_vma->anon_vma)
return 0;
IIUC, that means you'll not copy the WP bits for shmem and,
therefore, lose them during fork.
Good point.
I think the fix shouldn't be hard - we can also skip this if dst_vma->vm_flags
has VM_UFFD_WP set (that means UFFD_FEATURE_EVENT_FORK is enabled too). But
I'll check a bit into page copy later to make sure it works (maybe I'll add a
small test case too).
Thanks!
--
Peter Xu