Change the do_mmap() prototype to add a "locked" boolean argument. For now all call sites set it to true. Also remove the do_mmap_pgoff() API, which was just wrapping do_mmap() with a forced vm_flags == 0 argument. Signed-off-by: Michel Lespinasse <walken@xxxxxxxxxx> --- arch/x86/mm/mpx.c | 3 ++- fs/aio.c | 6 +++--- include/linux/mm.h | 13 ++----------- ipc/shm.c | 3 ++- mm/mmap.c | 8 ++++---- mm/nommu.c | 1 + mm/util.c | 4 ++-- 7 files changed, 16 insertions(+), 22 deletions(-) diff --git arch/x86/mm/mpx.c arch/x86/mm/mpx.c index 3835c18020b8..f83cdf80f210 100644 --- arch/x86/mm/mpx.c +++ arch/x86/mm/mpx.c @@ -54,7 +54,8 @@ static unsigned long mpx_mmap(unsigned long len) mm_write_lock(mm); addr = do_mmap(NULL, 0, len, PROT_READ | PROT_WRITE, - MAP_ANONYMOUS | MAP_PRIVATE, VM_MPX, 0, &populate, NULL); + MAP_ANONYMOUS | MAP_PRIVATE, VM_MPX, 0, + true, &populate, NULL); mm_write_unlock(mm); if (populate) mm_populate(addr, populate); diff --git fs/aio.c fs/aio.c index 704766588df4..018bd24d6204 100644 --- fs/aio.c +++ fs/aio.c @@ -525,9 +525,9 @@ static int aio_setup_ring(struct kioctx *ctx, unsigned int nr_events) return -EINTR; } - ctx->mmap_base = do_mmap_pgoff(ctx->aio_ring_file, 0, ctx->mmap_size, - PROT_READ | PROT_WRITE, - MAP_SHARED, 0, &unused, NULL); + ctx->mmap_base = do_mmap(ctx->aio_ring_file, 0, ctx->mmap_size, + PROT_READ | PROT_WRITE, + MAP_SHARED, 0, 0, true, &unused, NULL); mm_write_unlock(mm); if (IS_ERR((void *)ctx->mmap_base)) { ctx->mmap_size = 0; diff --git include/linux/mm.h include/linux/mm.h index 28b6af200214..8427e1d07b59 100644 --- include/linux/mm.h +++ include/linux/mm.h @@ -2361,22 +2361,13 @@ extern unsigned long mmap_region(struct file *file, unsigned long addr, struct list_head *uf); extern unsigned long do_mmap(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, - vm_flags_t vm_flags, unsigned long pgoff, unsigned long *populate, - struct list_head *uf); + vm_flags_t vm_flags, unsigned long pgoff, bool locked, + unsigned long *populate, struct list_head *uf); extern int __do_munmap(struct mm_struct *, unsigned long, size_t, struct list_head *uf, bool downgrade); extern int do_munmap(struct mm_struct *, unsigned long, size_t, struct list_head *uf); -static inline unsigned long -do_mmap_pgoff(struct file *file, unsigned long addr, - unsigned long len, unsigned long prot, unsigned long flags, - unsigned long pgoff, unsigned long *populate, - struct list_head *uf) -{ - return do_mmap(file, addr, len, prot, flags, 0, pgoff, populate, uf); -} - #ifdef CONFIG_MMU extern int __mm_populate(unsigned long addr, unsigned long len, int ignore_errors); diff --git ipc/shm.c ipc/shm.c index c04fc21cbe46..90d24c4960b9 100644 --- ipc/shm.c +++ ipc/shm.c @@ -1558,7 +1558,8 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, goto invalid; } - addr = do_mmap_pgoff(file, addr, size, prot, flags, 0, &populate, NULL); + addr = do_mmap(file, addr, size, prot, flags, 0, 0, + true, &populate, NULL); *raddr = addr; err = 0; if (IS_ERR_VALUE(addr)) diff --git mm/mmap.c mm/mmap.c index 0f95300c2788..2868e61927a1 100644 --- mm/mmap.c +++ mm/mmap.c @@ -1369,8 +1369,8 @@ static inline bool file_mmap_ok(struct file *file, struct inode *inode, unsigned long do_mmap(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, vm_flags_t vm_flags, - unsigned long pgoff, unsigned long *populate, - struct list_head *uf) + unsigned long pgoff, bool locked, + unsigned long *populate, struct list_head *uf) { struct mm_struct *mm = current->mm; int pkey = 0; @@ -2954,8 +2954,8 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, } file = get_file(vma->vm_file); - ret = do_mmap_pgoff(vma->vm_file, start, size, - prot, flags, pgoff, &populate, NULL); + ret = do_mmap(vma->vm_file, start, size, + prot, flags, 0, pgoff, true, &populate, NULL); fput(file); out: mm_write_unlock(mm); diff --git mm/nommu.c mm/nommu.c index c137db1923bd..a2c2bf8d7676 100644 --- mm/nommu.c +++ mm/nommu.c @@ -1102,6 +1102,7 @@ unsigned long do_mmap(struct file *file, unsigned long prot, unsigned long flags, vm_flags_t vm_flags, + bool locked, unsigned long pgoff, unsigned long *populate, struct list_head *uf) diff --git mm/util.c mm/util.c index 511e442e7329..337b006aef6d 100644 --- mm/util.c +++ mm/util.c @@ -503,8 +503,8 @@ unsigned long vm_mmap_pgoff(struct file *file, unsigned long addr, if (!ret) { if (mm_write_lock_killable(mm)) return -EINTR; - ret = do_mmap_pgoff(file, addr, len, prot, flag, pgoff, - &populate, &uf); + ret = do_mmap(file, addr, len, prot, flag, 0, pgoff, + true, &populate, &uf); mm_write_unlock(mm); userfaultfd_unmap_complete(mm, &uf); if (populate) -- 2.25.0.341.g760bfbb309-goog