This patch updates secretmem to use the new vma_flags_t type which will
soon supersede vm_flags_t altogether.

In order to make this change we also have to update mlock_future_ok(), we
replace the vm_flags_t parameter with a simple boolean is_vma_locked one,
which also simplifies the invocation here.

This is laying the groundwork for eliminating the vm_flags_t in
vm_area_desc and more broadly throughout the kernel.

No functional changes intended.

Signed-off-by: Lorenzo Stoakes <[email protected]>
---
 mm/internal.h  | 2 +-
 mm/mmap.c      | 8 ++++----
 mm/mremap.c    | 2 +-
 mm/secretmem.c | 7 +++----
 mm/vma.c       | 2 +-
 5 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/mm/internal.h b/mm/internal.h
index 27509a909915..da78f187412c 100644
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -1044,7 +1044,7 @@ extern long populate_vma_page_range(struct vm_area_struct 
*vma,
                unsigned long start, unsigned long end, int *locked);
 extern long faultin_page_range(struct mm_struct *mm, unsigned long start,
                unsigned long end, bool write, int *locked);
-bool mlock_future_ok(const struct mm_struct *mm, vm_flags_t vm_flags,
+bool mlock_future_ok(const struct mm_struct *mm, bool is_vma_locked,
                unsigned long bytes);
 
 /*
diff --git a/mm/mmap.c b/mm/mmap.c
index 35d11f08005d..d7a5b44fd6e0 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -225,12 +225,12 @@ static inline unsigned long round_hint_to_min(unsigned 
long hint)
        return hint;
 }
 
-bool mlock_future_ok(const struct mm_struct *mm, vm_flags_t vm_flags,
-                       unsigned long bytes)
+bool mlock_future_ok(const struct mm_struct *mm, bool is_vma_locked,
+                    unsigned long bytes)
 {
        unsigned long locked_pages, limit_pages;
 
-       if (!(vm_flags & VM_LOCKED) || capable(CAP_IPC_LOCK))
+       if (!is_vma_locked || capable(CAP_IPC_LOCK))
                return true;
 
        locked_pages = bytes >> PAGE_SHIFT;
@@ -416,7 +416,7 @@ unsigned long do_mmap(struct file *file, unsigned long addr,
                if (!can_do_mlock())
                        return -EPERM;
 
-       if (!mlock_future_ok(mm, vm_flags, len))
+       if (!mlock_future_ok(mm, vm_flags & VM_LOCKED, len))
                return -EAGAIN;
 
        if (file) {
diff --git a/mm/mremap.c b/mm/mremap.c
index 8391ae17de64..2be876a70cc0 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -1740,7 +1740,7 @@ static int check_prep_vma(struct vma_remap_struct *vrm)
        if (vma->vm_flags & (VM_DONTEXPAND | VM_PFNMAP))
                return -EFAULT;
 
-       if (!mlock_future_ok(mm, vma->vm_flags, vrm->delta))
+       if (!mlock_future_ok(mm, vma->vm_flags & VM_LOCKED, vrm->delta))
                return -EAGAIN;
 
        if (!may_expand_vm(mm, vma->vm_flags, vrm->delta >> PAGE_SHIFT))
diff --git a/mm/secretmem.c b/mm/secretmem.c
index edf111e0a1bb..11a779c812a7 100644
--- a/mm/secretmem.c
+++ b/mm/secretmem.c
@@ -122,13 +122,12 @@ static int secretmem_mmap_prepare(struct vm_area_desc 
*desc)
 {
        const unsigned long len = vma_desc_size(desc);
 
-       if ((desc->vm_flags & (VM_SHARED | VM_MAYSHARE)) == 0)
+       if (!vma_desc_test_flags(desc, VMA_SHARED_BIT, VMA_MAYSHARE_BIT))
                return -EINVAL;
 
-       if (!mlock_future_ok(desc->mm, desc->vm_flags | VM_LOCKED, len))
+       vma_desc_set_flags(desc, VMA_LOCKED_BIT, VMA_DONTDUMP_BIT);
+       if (!mlock_future_ok(desc->mm, /*is_vma_locked=*/ true, len))
                return -EAGAIN;
-
-       desc->vm_flags |= VM_LOCKED | VM_DONTDUMP;
        desc->vm_ops = &secretmem_vm_ops;
 
        return 0;
diff --git a/mm/vma.c b/mm/vma.c
index 3dbe414eff89..8f1ea5c66cb9 100644
--- a/mm/vma.c
+++ b/mm/vma.c
@@ -3049,7 +3049,7 @@ static int acct_stack_growth(struct vm_area_struct *vma,
                return -ENOMEM;
 
        /* mlock limit tests */
-       if (!mlock_future_ok(mm, vma->vm_flags, grow << PAGE_SHIFT))
+       if (!mlock_future_ok(mm, vma->vm_flags & VM_LOCKED, grow << PAGE_SHIFT))
                return -ENOMEM;
 
        /* Check to ensure the stack will not grow into a hugetlb-only region */
-- 
2.52.0

Reply via email to