On Wed, Jul 08, 2026 at 09:52:19PM -0400, Zi Yan wrote:
> On Thu Jul 2, 2026 at 11:46 AM EDT, Lorenzo Stoakes wrote:
> > On Thu, Jul 02, 2026 at 09:12:33PM +0800, Lance Yang wrote:
> >>
> >> On Mon, Jun 29, 2026 at 08:25:33PM +0100, Lorenzo Stoakes wrote:
> >> >Update various uses of legacy flags in vma.c and mmap.c to the new
> >> >vma_flags_t type, updating comments alongside them to be consistent.
> >> >
> >> >Also update __install_special_mapping() to rearrange things slightly to
> >> >accommodate the changes.
> >> >
> >> >Signed-off-by: Lorenzo Stoakes <[email protected]>
> >> >---
> >> [...]
> >> >diff --git a/mm/vma.c b/mm/vma.c
> >> >index b81c05e67a61..ab2ef0f04420 100644
> >> >--- a/mm/vma.c
> >> >+++ b/mm/vma.c
> >> >@@ -3417,23 +3417,27 @@ struct vm_area_struct *__install_special_mapping(
> >> >  vm_flags_t vm_flags, void *priv,
> >> >  const struct vm_operations_struct *ops)
> >> > {
> >> >- int ret;
> >> >+ vma_flags_t vma_flags = legacy_to_vma_flags(vm_flags);
> >> >  struct vm_area_struct *vma;
> >> >+ int ret;
> >> >
> >> >  vma = vm_area_alloc(mm);
> >> >- if (unlikely(vma == NULL))
> >> >+ if (unlikely(!vma))
> >> >          return ERR_PTR(-ENOMEM);
> >> >
> >> >- vma_set_range(vma, addr, addr + len, 0);
> >> >- vm_flags |= vma_flags_to_legacy(mm->def_vma_flags) | VM_DONTEXPAND;
> >> >+ vma_flags_set_mask(&vma_flags, mm->def_vma_flags);
> >> >+ vma_flags_set(&vma_flags, VMA_DONTEXPAND_BIT);
> >> >  if (pgtable_supports_soft_dirty())
> >> >-         vm_flags |= VM_SOFTDIRTY;
> >> >- vm_flags_init(vma, vm_flags & ~VM_LOCKED_MASK);
> >> >+         vma_flags_set(&vma_flags, VMA_SOFTDIRTY_BIT);
> >> >+ vma_flags_clear_mask(&vma_flags, VMA_LOCKED_MASK);
> >> >+ vma->flags = vma_flags;
> >>
> >> Maybe worth a vma_flags_init() helper here to mirror vm_flags_init()?
> >> With this open-coded, we lose the soft-dirty WARN_ON_ONCE sanity check.
> >>
> >> Might be nicer to keep that check in one place ;)
> >
> > I really hate all the VMA flag accessors, they conflate things horribly - we
> > should be explicitly taking VMA write locks when we need to (and often 
> > killable
> > ones actually) not assuming that a VMA flags accessor does (they should at 
> > most
> > assert).
> >
> > This case is even more terribly egregious - you are setting flags at an
> > arbitrary time, why are we asserting something about softdirty?
> >
> > You may update them as part of initialisation, maybe not. It's far from a
> > guarantee and feels like a lazy place to put it.
> >
> > BUT obviously it's an oversight not to open code that here, so I'll update 
> > the
> > patch to do that!
>
> What do you want to open code here? softdirty WARN_ON_ONCE()?

As you can tell I said this reflexively without checking the code :)

>
> vma_flags gets VMA_SOFTDIRTY_BIT just above vma->flags, why do we need a
> check after that?

And yeah it's completely unnecessary, indeed.

>
> BTW, if you think the check is needed, patch 9 will need to be updated,
> since the same pattern appears in create_init_stack_vma().

I'll check to see if it's valid there.

For me it just feels like the most silly place to put that check, a VMA flags
update should update VMA flags not start randomly asserting silly things :)

>
> >
> > I want VMA flags to be a clean stateless thing, other than the flags
> > themselves. Implicit, unrelated, asserts or lock acquisitions in general 
> > should
> > be done separately IMO.
> >
>
> Anyway,
>
> Reviewed-by: Zi Yan <[email protected]>

Thanks!

>
> --
> Best Regards,
> Yan, Zi
>

Cheers, Lorenzo

Reply via email to