On 3/20/26 23:39, Lorenzo Stoakes (Oracle) wrote: > In the mmap_prepare compatibility layer, we don't need to hold the rmap > lock, as we are being called from an .mmap handler. > > The .mmap_prepare hook, when invoked in the VMA logic, is called prior to > the VMA being instantiated, but the completion hook is called after the VMA > is linked into the maple tree, meaning rmap walkers can reach it. > > The mmap hook does not link the VMA into the tree, so this cannot happen. > > Therefore it's safe to simply disable this in the mmap_prepare > compatibility layer. > > Also update VMA tests code to reflect current compatibility layer state. > > Signed-off-by: Lorenzo Stoakes (Oracle) <[email protected]>
Acked-by: Vlastimil Babka (SUSE) <[email protected]> a typo fix below, Andrew can fix locally? > --- > mm/util.c | 6 ++++- > tools/testing/vma/include/dup.h | 42 +++++++++++++++++---------------- > 2 files changed, 27 insertions(+), 21 deletions(-) > > diff --git a/mm/util.c b/mm/util.c > index a2cfa0d77c35..182f0f5cc400 100644 > --- a/mm/util.c > +++ b/mm/util.c > @@ -1204,6 +1204,7 @@ int compat_vma_mmap(struct file *file, struct > vm_area_struct *vma) > > .action.type = MMAP_NOTHING, /* Default */ > }; > + struct mmap_action *action = &desc.action; > int err; > > err = vfs_mmap_prepare(file, &desc); > @@ -1214,8 +1215,11 @@ int compat_vma_mmap(struct file *file, struct > vm_area_struct *vma) > if (err) > return err; > > + /* being invoked from .mmmap means we don't have to enforce this. */ .mmap > + action->hide_from_rmap_until_complete = false; > + > set_vma_from_desc(vma, &desc); > - err = mmap_action_complete(vma, &desc.action); > + err = mmap_action_complete(vma, action); > if (err) { > const size_t len = vma_pages(vma) << PAGE_SHIFT; >

