Re: [PATCH v2 1/5] proc/task_mmu: remove unnecessary helpers
From: Usama Arif
Date: Mon Sep 07 2026 - 12:49:45 EST
On Sun, 6 Sep 2026 23:39:14 -0700 Suren Baghdasaryan <surenb@xxxxxxxxxx> wrote:
> When per-vma locks were behind a config option, a number of helper
> functions were needed to simplify the locking code. Now that these
> locks are universally available, we can do a little cleanup.
> Remove lock_vma_range(), unlock_vma_range(), query_vma_setup(),
> query_vma_teardown() helpers.
>
> No functional change intended.
>
> Signed-off-by: Suren Baghdasaryan <surenb@xxxxxxxxxx>
> ---
> fs/proc/task_mmu.c | 67 ++++++++++++----------------------------------
> 1 file changed, 17 insertions(+), 50 deletions(-)
Change makes sense independent of the series as well.
Acked-by: Usama Arif <usama.arif@xxxxxxxxx>
>
> diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
> index e671b4fd8ded..2f500d639db5 100644
> --- a/fs/proc/task_mmu.c
> +++ b/fs/proc/task_mmu.c
> @@ -160,25 +160,6 @@ static void unlock_ctx_vma(struct proc_maps_locking_ctx *lock_ctx)
> }
> }
>
> -static inline bool lock_vma_range(struct seq_file *m,
> - struct proc_maps_locking_ctx *lock_ctx)
> -{
> - rcu_read_lock();
> - reset_lock_ctx(lock_ctx);
> -
> - return true;
> -}
> -
> -static inline void unlock_vma_range(struct proc_maps_locking_ctx *lock_ctx)
> -{
> - if (lock_ctx->mmap_locked) {
> - unlock_ctx_mm(lock_ctx);
> - } else {
> - unlock_ctx_vma(lock_ctx);
> - rcu_read_unlock();
> - }
> -}
> -
> static struct vm_area_struct *get_next_vma(struct proc_maps_private *priv,
> loff_t last_pos)
> {
> @@ -286,13 +267,8 @@ static void *m_start(struct seq_file *m, loff_t *ppos)
> return NULL;
> }
>
> - if (!lock_vma_range(m, lock_ctx)) {
> - mmput(mm);
> - put_task_struct(priv->task);
> - priv->task = NULL;
> - return ERR_PTR(-EINTR);
> - }
> -
> + rcu_read_lock();
> + reset_lock_ctx(lock_ctx);
> /*
> * Reset current position if last_addr was set before
> * and it's not a sentinel.
> @@ -325,7 +301,12 @@ static void m_stop(struct seq_file *m, void *v)
> return;
>
> release_task_mempolicy(priv);
> - unlock_vma_range(&priv->lock_ctx);
> + if (priv->lock_ctx.mmap_locked) {
> + unlock_ctx_mm(&priv->lock_ctx);
> + } else {
> + unlock_ctx_vma(&priv->lock_ctx);
> + rcu_read_unlock();
> + }
> mmput(mm);
> put_task_struct(priv->task);
> priv->task = NULL;
> @@ -518,21 +499,6 @@ static int pid_maps_open(struct inode *inode, struct file *file)
> PROCMAP_QUERY_VMA_FLAGS \
> )
>
> -static int query_vma_setup(struct proc_maps_locking_ctx *lock_ctx)
> -{
> - reset_lock_ctx(lock_ctx);
> -
> - return 0;
> -}
> -
> -static void query_vma_teardown(struct proc_maps_locking_ctx *lock_ctx)
> -{
> - if (lock_ctx->mmap_locked)
> - unlock_ctx_mm(lock_ctx);
> - else
> - unlock_ctx_vma(lock_ctx);
> -}
> -
> static struct vm_area_struct *query_vma_find_by_addr(struct proc_maps_locking_ctx *lock_ctx,
> unsigned long addr)
> {
> @@ -653,12 +619,7 @@ static int do_procmap_query(struct mm_struct *mm, void __user *uarg)
> if (!mm || !mmget_not_zero(mm))
> return -ESRCH;
>
> - err = query_vma_setup(&lock_ctx);
> - if (err) {
> - mmput(mm);
> - return err;
> - }
> -
> + reset_lock_ctx(&lock_ctx);
> vma = query_matching_vma(&lock_ctx, karg.query_addr, karg.query_flags);
> if (IS_ERR(vma)) {
> err = PTR_ERR(vma);
> @@ -732,7 +693,10 @@ static int do_procmap_query(struct mm_struct *mm, void __user *uarg)
> vm_file = get_file(vma->vm_file);
>
> /* unlock vma or mmap_lock, and put mm_struct before copying data to user */
> - query_vma_teardown(&lock_ctx);
> + if (lock_ctx.mmap_locked)
> + unlock_ctx_mm(&lock_ctx);
> + else
> + unlock_ctx_vma(&lock_ctx);
> mmput(mm);
>
> if (karg.build_id_size) {
> @@ -773,7 +737,10 @@ static int do_procmap_query(struct mm_struct *mm, void __user *uarg)
> return 0;
>
> out:
> - query_vma_teardown(&lock_ctx);
> + if (lock_ctx.mmap_locked)
> + unlock_ctx_mm(&lock_ctx);
> + else
> + unlock_ctx_vma(&lock_ctx);
> mmput(mm);
> out_file:
> if (vm_file)
> --
> 2.55.0.979.g7e5102b832-goog
>
>