> > > > + ret = mmap_read_lock_killable(priv->mm); > > + if (!ret) { > > + /* mmap_lock_speculate_try_begin() succeeds when holding mmap_read_lock */ > > + mmap_lock_speculate_try_begin(priv->mm, &priv->mm_wr_seq); > > + mmap_read_unlock(priv->mm); > > + ret = -EAGAIN; > > + } > > + > > + rcu_read_lock(); > > + > > + anon_vma_name_put_if_valid(copy); > > +put_file: > > + if (copy->vm_file) > > + fput(copy->vm_file); > > +out: > > + return ret; > > +} > > + > > +static void put_vma_snapshot(struct proc_maps_private *priv) > > +{ > > + struct vm_area_struct *vma = &priv->vma_copy; > > + > > + anon_vma_name_put_if_valid(vma); > > + if (vma->vm_file) > > + fput(vma->vm_file); > > +} > > + > > [...]