/* This mask defines which mm->def_flags a process can inherit its parent */
 #define VM_INIT_DEF_MASK       VM_NOHUGEPAGE
 
-/* This mask is used to clear all the VMA flags used by mlock */
-#define VM_LOCKED_CLEAR_MASK   (~(VM_LOCKED | VM_LOCKONFAULT))
+/* This mask represents all the VMA flag bits used by mlock */
+#define VM_LOCKED_MASK (VM_LOCKED | VM_LOCKONFAULT)
 
 /* Arch-specific flags to clear when updating VM flags on protection change */
 #ifndef VM_ARCH_CLEAR
 
                        tmp->anon_vma = NULL;
                } else if (anon_vma_fork(tmp, mpnt))
                        goto fail_nomem_anon_vma_fork;
-               tmp->vm_flags &= ~(VM_LOCKED | VM_LOCKONFAULT);
+               vm_flags_clear(tmp, VM_LOCKED_MASK);
                file = tmp->vm_file;
                if (file) {
                        struct address_space *mapping = file->f_mapping;
 
        unsigned long s_end = sbase + PUD_SIZE;
 
        /* Allow segments to share if only one is marked locked */
-       unsigned long vm_flags = vma->vm_flags & VM_LOCKED_CLEAR_MASK;
-       unsigned long svm_flags = svma->vm_flags & VM_LOCKED_CLEAR_MASK;
+       unsigned long vm_flags = vma->vm_flags & ~VM_LOCKED_MASK;
+       unsigned long svm_flags = svma->vm_flags & ~VM_LOCKED_MASK;
 
        /*
         * match the virtual addresses, permission and the alignment of the
 
                if (vma->vm_start != tmp)
                        return -ENOMEM;
 
-               newflags = vma->vm_flags & VM_LOCKED_CLEAR_MASK;
+               newflags = vma->vm_flags & ~VM_LOCKED_MASK;
                newflags |= flags;
                /* Here we know that  vma->vm_start <= nstart < vma->vm_end. */
                tmp = vma->vm_end;
        struct vm_area_struct *vma, *prev = NULL;
        vm_flags_t to_add = 0;
 
-       current->mm->def_flags &= VM_LOCKED_CLEAR_MASK;
+       current->mm->def_flags &= ~VM_LOCKED_MASK;
        if (flags & MCL_FUTURE) {
                current->mm->def_flags |= VM_LOCKED;
 
        for_each_vma(vmi, vma) {
                vm_flags_t newflags;
 
-               newflags = vma->vm_flags & VM_LOCKED_CLEAR_MASK;
+               newflags = vma->vm_flags & ~VM_LOCKED_MASK;
                newflags |= to_add;
 
                /* Ignore errors */
 
                if ((vm_flags & VM_SPECIAL) || vma_is_dax(vma) ||
                                        is_vm_hugetlb_page(vma) ||
                                        vma == get_gate_vma(current->mm))
-                       vma->vm_flags &= VM_LOCKED_CLEAR_MASK;
+                       vm_flags_clear(vma, VM_LOCKED_MASK);
                else
                        mm->locked_vm += (len >> PAGE_SHIFT);
        }
        vma->vm_start = addr;
        vma->vm_end = addr + len;
 
-       vma->vm_flags = vm_flags | mm->def_flags | VM_DONTEXPAND | VM_SOFTDIRTY;
-       vma->vm_flags &= VM_LOCKED_CLEAR_MASK;
+       vm_flags_init(vma, (vm_flags | mm->def_flags |
+                     VM_DONTEXPAND | VM_SOFTDIRTY) & ~VM_LOCKED_MASK);
        vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
 
        vma->vm_ops = ops;
 
 
        if (unlikely(!err && (flags & MREMAP_DONTUNMAP))) {
                /* We always clear VM_LOCKED[ONFAULT] on the old vma */
-               vma->vm_flags &= VM_LOCKED_CLEAR_MASK;
+               vm_flags_clear(vma, VM_LOCKED_MASK);
 
                /*
                 * anon_vma links of the old vma is no longer needed after its page