Secretmem has a simple .mmap() hook which is easily converted to the new .mmap_proto() callback. In addition, importantly, it's a rare instance of a mergeable VMA mapping which adjusts parameters which affect merge compatibility. By using the .mmap_proto() callback there's no longer any need to retry the merge later as we can simply set the correct flags from the start. Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx> --- mm/secretmem.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/mm/secretmem.c b/mm/secretmem.c index 1b0a214ee558..64fc0890a28b 100644 --- a/mm/secretmem.c +++ b/mm/secretmem.c @@ -120,18 +120,18 @@ static int secretmem_release(struct inode *inode, struct file *file) return 0; } -static int secretmem_mmap(struct file *file, struct vm_area_struct *vma) +static int secretmem_mmap_proto(struct vma_proto *proto) { - unsigned long len = vma->vm_end - vma->vm_start; + unsigned long len = proto->end - proto->start; - if ((vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) == 0) + if ((proto->flags & (VM_SHARED | VM_MAYSHARE)) == 0) return -EINVAL; - if (!mlock_future_ok(vma->vm_mm, vma->vm_flags | VM_LOCKED, len)) + if (!mlock_future_ok(proto->mm, proto->flags | VM_LOCKED, len)) return -EAGAIN; - vm_flags_set(vma, VM_LOCKED | VM_DONTDUMP); - vma->vm_ops = &secretmem_vm_ops; + proto->flags |= VM_LOCKED | VM_DONTDUMP; + proto->vm_ops = &secretmem_vm_ops; return 0; } @@ -143,7 +143,7 @@ bool vma_is_secretmem(struct vm_area_struct *vma) static const struct file_operations secretmem_fops = { .release = secretmem_release, - .mmap = secretmem_mmap, + .mmap_proto = secretmem_mmap_proto, }; static int secretmem_migrate_folio(struct address_space *mapping, -- 2.49.0