proc: inline vma_stop into m_stop
Instead of calling vma_stop() from m_start() and m_next(), do its work in m_stop(). Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Link: http://lkml.kernel.org/r/20200317193201.9924-1-adobriyan@gmail.com Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
5c5ab9714c
commit
d07ded611e
@ -123,15 +123,6 @@ static void release_task_mempolicy(struct proc_maps_private *priv)
|
||||
}
|
||||
#endif
|
||||
|
||||
static void vma_stop(struct proc_maps_private *priv)
|
||||
{
|
||||
struct mm_struct *mm = priv->mm;
|
||||
|
||||
release_task_mempolicy(priv);
|
||||
up_read(&mm->mmap_sem);
|
||||
mmput(mm);
|
||||
}
|
||||
|
||||
static struct vm_area_struct *
|
||||
m_next_vma(struct proc_maps_private *priv, struct vm_area_struct *vma)
|
||||
{
|
||||
@ -163,11 +154,16 @@ static void *m_start(struct seq_file *m, loff_t *ppos)
|
||||
return ERR_PTR(-ESRCH);
|
||||
|
||||
mm = priv->mm;
|
||||
if (!mm || !mmget_not_zero(mm))
|
||||
if (!mm || !mmget_not_zero(mm)) {
|
||||
put_task_struct(priv->task);
|
||||
priv->task = NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (down_read_killable(&mm->mmap_sem)) {
|
||||
mmput(mm);
|
||||
put_task_struct(priv->task);
|
||||
priv->task = NULL;
|
||||
return ERR_PTR(-EINTR);
|
||||
}
|
||||
|
||||
@ -195,7 +191,6 @@ static void *m_start(struct seq_file *m, loff_t *ppos)
|
||||
if (pos == mm->map_count && priv->tail_vma)
|
||||
return priv->tail_vma;
|
||||
|
||||
vma_stop(priv);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -206,21 +201,22 @@ static void *m_next(struct seq_file *m, void *v, loff_t *pos)
|
||||
|
||||
(*pos)++;
|
||||
next = m_next_vma(priv, v);
|
||||
if (!next)
|
||||
vma_stop(priv);
|
||||
return next;
|
||||
}
|
||||
|
||||
static void m_stop(struct seq_file *m, void *v)
|
||||
{
|
||||
struct proc_maps_private *priv = m->private;
|
||||
struct mm_struct *mm = priv->mm;
|
||||
|
||||
if (!IS_ERR_OR_NULL(v))
|
||||
vma_stop(priv);
|
||||
if (priv->task) {
|
||||
put_task_struct(priv->task);
|
||||
priv->task = NULL;
|
||||
}
|
||||
if (!priv->task)
|
||||
return;
|
||||
|
||||
release_task_mempolicy(priv);
|
||||
up_read(&mm->mmap_sem);
|
||||
mmput(mm);
|
||||
put_task_struct(priv->task);
|
||||
priv->task = NULL;
|
||||
}
|
||||
|
||||
static int proc_maps_open(struct inode *inode, struct file *file,
|
||||
|
Loading…
Reference in New Issue
Block a user