Kill *_tid_*maps* data/functions. proc_maps_open() can use
is_tgid_pid_entry() and initialize priv->is_tgid for ->show()
methods.

Signed-off-by: Oleg Nesterov <o...@redhat.com>
---
 fs/proc/base.c     |    6 +-
 fs/proc/internal.h |    4 +-
 fs/proc/task_mmu.c |  140 ++++++++--------------------------------------------
 3 files changed, 25 insertions(+), 125 deletions(-)

diff --git a/fs/proc/base.c b/fs/proc/base.c
index 9d47fe0..368f6fe 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -2919,12 +2919,12 @@ static const struct pid_entry tid_base_stuff[] = {
        INF("cmdline",   S_IRUGO, proc_pid_cmdline),
        ONE("stat",      S_IRUGO, proc_pid_stat),
        ONE("statm",     S_IRUGO, proc_pid_statm),
-       REG("maps",      S_IRUGO, proc_tid_maps_operations),
+       REG("maps",      S_IRUGO, proc_pid_maps_operations),
 #ifdef CONFIG_CHECKPOINT_RESTORE
        REG("children",  S_IRUGO, proc_tid_children_operations),
 #endif
 #ifdef CONFIG_NUMA
-       REG("numa_maps", S_IRUGO, proc_tid_numa_maps_operations),
+       REG("numa_maps", S_IRUGO, proc_pid_numa_maps_operations),
 #endif
        REG("mem",       S_IRUSR|S_IWUSR, proc_mem_operations),
        LNK("cwd",       proc_cwd_link),
@@ -2934,7 +2934,7 @@ static const struct pid_entry tid_base_stuff[] = {
        REG("mountinfo",  S_IRUGO, proc_mountinfo_operations),
 #ifdef CONFIG_PROC_PAGE_MONITOR
        REG("clear_refs", S_IWUSR, proc_clear_refs_operations),
-       REG("smaps",     S_IRUGO, proc_tid_smaps_operations),
+       REG("smaps",     S_IRUGO, proc_pid_smaps_operations),
        REG("pagemap",    S_IRUSR, proc_pagemap_operations),
 #endif
 #ifdef CONFIG_SECURITY
diff --git a/fs/proc/internal.h b/fs/proc/internal.h
index c7bb0e3..46500af 100644
--- a/fs/proc/internal.h
+++ b/fs/proc/internal.h
@@ -268,6 +268,7 @@ extern int proc_remount(struct super_block *, int *, char 
*);
  */
 struct proc_maps_private {
        struct pid *pid;
+       bool is_tgid;
        struct task_struct *task;
        struct mm_struct *mm;
 #ifdef CONFIG_MMU
@@ -281,11 +282,8 @@ struct proc_maps_private {
 struct mm_struct *proc_mem_open(struct inode *inode, unsigned int mode);
 
 extern const struct file_operations proc_pid_maps_operations;
-extern const struct file_operations proc_tid_maps_operations;
 extern const struct file_operations proc_pid_numa_maps_operations;
-extern const struct file_operations proc_tid_numa_maps_operations;
 extern const struct file_operations proc_pid_smaps_operations;
-extern const struct file_operations proc_tid_smaps_operations;
 extern const struct file_operations proc_clear_refs_operations;
 extern const struct file_operations proc_pagemap_operations;
 
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index 4ec6b72..7618ef8 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -231,6 +231,7 @@ static int proc_maps_open(struct inode *inode, struct file 
*file,
                return -ENOMEM;
 
        priv->pid = proc_pid(inode);
+       priv->is_tgid = is_tgid_pid_entry(PROC_I(inode)->pid_entry);
        priv->mm = proc_mem_open(inode, PTRACE_MODE_READ);
        if (IS_ERR(priv->mm)) {
                int err = PTR_ERR(priv->mm);
@@ -252,16 +253,7 @@ static int proc_map_release(struct inode *inode, struct 
file *file)
        return seq_release_private(inode, file);
 }
 
-
-static int do_maps_open(struct inode *inode, struct file *file,
-                       const struct seq_operations *ops)
-{
-       return proc_maps_open(inode, file, ops,
-                               sizeof(struct proc_maps_private));
-}
-
-static void
-show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
+static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)
 {
        struct mm_struct *mm = vma->vm_mm;
        struct file *file = vma->vm_file;
@@ -331,15 +323,15 @@ show_map_vma(struct seq_file *m, struct vm_area_struct 
*vma, int is_pid)
                        goto done;
                }
 
-               tid = vm_is_stack(task, vma, is_pid);
-
+               tid = vm_is_stack(task, vma, priv->is_tgid);
                if (tid != 0) {
                        /*
                         * Thread stack in /proc/PID/task/TID/maps or
                         * the main process stack.
                         */
-                       if (!is_pid || (vma->vm_start <= mm->start_stack &&
-                           vma->vm_end >= mm->start_stack)) {
+                       if (!priv->is_tgid ||
+                           (vma->vm_start <= mm->start_stack &&
+                            vma->vm_end >= mm->start_stack)) {
                                name = "[stack]";
                        } else {
                                /* Thread stack in /proc/PID/maps */
@@ -357,23 +349,13 @@ done:
        seq_putc(m, '\n');
 }
 
-static int show_map(struct seq_file *m, void *v, int is_pid)
+static int show_pid_map(struct seq_file *m, void *v)
 {
-       show_map_vma(m, v, is_pid);
+       show_map_vma(m, v);
        m_cache_vma(m, v);
        return 0;
 }
 
-static int show_pid_map(struct seq_file *m, void *v)
-{
-       return show_map(m, v, 1);
-}
-
-static int show_tid_map(struct seq_file *m, void *v)
-{
-       return show_map(m, v, 0);
-}
-
 static const struct seq_operations proc_pid_maps_op = {
        .start  = m_start,
        .next   = m_next,
@@ -381,21 +363,10 @@ static const struct seq_operations proc_pid_maps_op = {
        .show   = show_pid_map
 };
 
-static const struct seq_operations proc_tid_maps_op = {
-       .start  = m_start,
-       .next   = m_next,
-       .stop   = m_stop,
-       .show   = show_tid_map
-};
-
 static int pid_maps_open(struct inode *inode, struct file *file)
 {
-       return do_maps_open(inode, file, &proc_pid_maps_op);
-}
-
-static int tid_maps_open(struct inode *inode, struct file *file)
-{
-       return do_maps_open(inode, file, &proc_tid_maps_op);
+       return proc_maps_open(inode, file, &proc_pid_maps_op,
+                               sizeof(struct proc_maps_private));
 }
 
 const struct file_operations proc_pid_maps_operations = {
@@ -405,13 +376,6 @@ const struct file_operations proc_pid_maps_operations = {
        .release        = proc_map_release,
 };
 
-const struct file_operations proc_tid_maps_operations = {
-       .open           = tid_maps_open,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = proc_map_release,
-};
-
 /*
  * Proportional Set Size(PSS): my share of RSS.
  *
@@ -584,7 +548,7 @@ static void show_smap_vma_flags(struct seq_file *m, struct 
vm_area_struct *vma)
        seq_putc(m, '\n');
 }
 
-static int show_smap(struct seq_file *m, void *v, int is_pid)
+static int show_pid_smap(struct seq_file *m, void *v)
 {
        struct vm_area_struct *vma = v;
        struct mem_size_stats mss;
@@ -600,7 +564,7 @@ static int show_smap(struct seq_file *m, void *v, int 
is_pid)
        if (vma->vm_mm && !is_vm_hugetlb_page(vma))
                walk_page_range(vma->vm_start, vma->vm_end, &smaps_walk);
 
-       show_map_vma(m, vma, is_pid);
+       show_map_vma(m, vma);
 
        seq_printf(m,
                   "Size:           %8lu kB\n"
@@ -642,16 +606,6 @@ static int show_smap(struct seq_file *m, void *v, int 
is_pid)
        return 0;
 }
 
-static int show_pid_smap(struct seq_file *m, void *v)
-{
-       return show_smap(m, v, 1);
-}
-
-static int show_tid_smap(struct seq_file *m, void *v)
-{
-       return show_smap(m, v, 0);
-}
-
 static const struct seq_operations proc_pid_smaps_op = {
        .start  = m_start,
        .next   = m_next,
@@ -659,21 +613,10 @@ static const struct seq_operations proc_pid_smaps_op = {
        .show   = show_pid_smap
 };
 
-static const struct seq_operations proc_tid_smaps_op = {
-       .start  = m_start,
-       .next   = m_next,
-       .stop   = m_stop,
-       .show   = show_tid_smap
-};
-
 static int pid_smaps_open(struct inode *inode, struct file *file)
 {
-       return do_maps_open(inode, file, &proc_pid_smaps_op);
-}
-
-static int tid_smaps_open(struct inode *inode, struct file *file)
-{
-       return do_maps_open(inode, file, &proc_tid_smaps_op);
+       return proc_maps_open(inode, file, &proc_pid_smaps_op,
+                               sizeof(struct proc_maps_private));
 }
 
 const struct file_operations proc_pid_smaps_operations = {
@@ -683,13 +626,6 @@ const struct file_operations proc_pid_smaps_operations = {
        .release        = proc_map_release,
 };
 
-const struct file_operations proc_tid_smaps_operations = {
-       .open           = tid_smaps_open,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = proc_map_release,
-};
-
 /*
  * We do not want to have constant page-shift bits sitting in
  * pagemap entries and are about to reuse them some time soon.
@@ -1382,7 +1318,7 @@ static int gather_hugetbl_stats(pte_t *pte, unsigned long 
hmask,
 /*
  * Display pages allocated per node and memory policy via /proc.
  */
-static int show_numa_map(struct seq_file *m, void *v, int is_pid)
+static int show_pid_numa_map(struct seq_file *m, void *v)
 {
        struct numa_maps_private *numa_priv = m->private;
        struct proc_maps_private *proc_priv = &numa_priv->proc_maps;
@@ -1421,14 +1357,15 @@ static int show_numa_map(struct seq_file *m, void *v, 
int is_pid)
        } else if (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk) {
                seq_puts(m, " heap");
        } else {
-               pid_t tid = vm_is_stack(task, vma, is_pid);
+               pid_t tid = vm_is_stack(task, vma, proc_priv->is_tgid);
                if (tid != 0) {
                        /*
                         * Thread stack in /proc/PID/task/TID/maps or
                         * the main process stack.
                         */
-                       if (!is_pid || (vma->vm_start <= mm->start_stack &&
-                           vma->vm_end >= mm->start_stack))
+                       if (!proc_priv->is_tgid ||
+                           (vma->vm_start <= mm->start_stack &&
+                            vma->vm_end >= mm->start_stack))
                                seq_puts(m, " stack");
                        else
                                seq_printf(m, " stack:%d", tid);
@@ -1473,16 +1410,6 @@ out:
        return 0;
 }
 
-static int show_pid_numa_map(struct seq_file *m, void *v)
-{
-       return show_numa_map(m, v, 1);
-}
-
-static int show_tid_numa_map(struct seq_file *m, void *v)
-{
-       return show_numa_map(m, v, 0);
-}
-
 static const struct seq_operations proc_pid_numa_maps_op = {
        .start  = m_start,
        .next   = m_next,
@@ -1490,28 +1417,10 @@ static const struct seq_operations 
proc_pid_numa_maps_op = {
        .show   = show_pid_numa_map,
 };
 
-static const struct seq_operations proc_tid_numa_maps_op = {
-       .start  = m_start,
-       .next   = m_next,
-       .stop   = m_stop,
-       .show   = show_tid_numa_map,
-};
-
-static int numa_maps_open(struct inode *inode, struct file *file,
-                         const struct seq_operations *ops)
-{
-       return proc_maps_open(inode, file, ops,
-                               sizeof(struct numa_maps_private));
-}
-
 static int pid_numa_maps_open(struct inode *inode, struct file *file)
 {
-       return numa_maps_open(inode, file, &proc_pid_numa_maps_op);
-}
-
-static int tid_numa_maps_open(struct inode *inode, struct file *file)
-{
-       return numa_maps_open(inode, file, &proc_tid_numa_maps_op);
+       return proc_maps_open(inode, file, &proc_pid_numa_maps_op,
+                               sizeof(struct numa_maps_private));
 }
 
 const struct file_operations proc_pid_numa_maps_operations = {
@@ -1520,11 +1429,4 @@ const struct file_operations 
proc_pid_numa_maps_operations = {
        .llseek         = seq_lseek,
        .release        = proc_map_release,
 };
-
-const struct file_operations proc_tid_numa_maps_operations = {
-       .open           = tid_numa_maps_open,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = proc_map_release,
-};
 #endif /* CONFIG_NUMA */
-- 
1.5.5.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to