Re: [PATCH v2 29/33] mm/vma: introduce and use vma_set_pgoff()
"Vlastimil Babka (SUSE)" <[email protected]> Thu, 16 Jul 2026 10:28:37 +0200
| Newsgroups | org.kernel.vger.linux-sgx,dev.linux.lists.damon,dev.linux.lists.iommu,dev.linux.lists.nvdimm,org.freedesktop.lists.dri-devel,org.kernel.vger.kvm,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-parisc,org.kernel.vger.linux-perf-users,org.kernel.vger.linux-tegra,org.kernel.vger.linux-trace-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 7/10/26 22:17, Lorenzo Stoakes wrote: > In order to lay the foundation for work that permits us to track the > virtual page offset of MAP_PRIVATE file-backed mappings, we abstract the > assignment of vma->vm_pgoff to vma_set_pgoff(). > > We additionally add a lock check here using the newly introduced > vma_assert_can_modify(). This asserts the VMA write lock if the VMA is > attached. > > We also assert that, if this is an anonymous VMA and unfaulted, that its > (virtual) page offset is equal to the page offset of the VMA's address. > > We must be careful about MAP_PRIVATE-/dev/zero which violates fundamental > assumptions about anonymous memory, so we check for !vma->vm_file after > using vma_is_anonymous() which these mappings satisfy. > > Additionally, we only perform the assert if CONFIG_MMU is defined, as nommu > does not set vma->vm_pgoff = addr >> PAGE_SHIFT. This isn't really relevant > to rmap as it has no anon rmap (nor needs it), but we must avoid it > asserting falsely. > > All of this logic is kept in assert_sane_pgoff() to keep things clear. > > In order to maintain correctness given this assert, we also update > __install_special_mapping() to invoke vma_set_range() after it's set > vma->vm_ops (which determine whether the VMA is anonymous or not). > > We do not use vma_set_pgoff() in vm_area_init_from(), as at the point of > forking, we don't necessarily have correct locking state. > > Updating vma_set_range() covers most cases, but in addition to this we also > update insert_vm_struct(), compat_set_vma_from_desc() and nommu callers. > > We also update vma_add_pgoff() and vma_sub_pgoff() to use vma_set_pgoff(). > > While we're here, we drop a BUG_ON() and update insert_vm_struct()'s > comment to reflect the fact anonymous mappings can be added here. > > Finally, we update the CONFIG_MMU, CONFIG_PER_VMA_LOCK defines in the VMA > userland tests so IS_ENABLED() will work correctly with them. > > No functional change intended. > > Reviewed-by: Pedro Falcato <[email protected]> > Signed-off-by: Lorenzo Stoakes <[email protected]> Reviewed-by: Vlastimil Babka (SUSE) <[email protected]>