On Sat, Jul 11, 2026 at 05:23:39PM +0100, Lorenzo Stoakes wrote:
> 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.

Exactly the same case as here, unnecessary :)

Cheers, LOrenzo

Reply via email to