lkml.org 
[lkml]   [2006]   [Feb]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 11/23] proc: Move proc_maps_operations into task_mmu.c
    From
    Date

    All of the functions for proc_maps_operations are already
    defined in task_mmu.c so move the operations structure to
    keep the functionality together.

    Since task_nommu.c implements a dummy version of
    /proc/<pid>/maps give it a simplified version
    of proc_maps_operations that it can modify
    to best suit its needs.

    Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>


    ---

    fs/proc/base.c | 61 --------------------------------------------------
    fs/proc/internal.h | 4 +++
    fs/proc/task_mmu.c | 54 ++++++++++++++++++++++++++++++++++++++++++--
    fs/proc/task_nommu.c | 21 ++++++++++++++++-
    4 files changed, 75 insertions(+), 65 deletions(-)

    b5c8957160dd4dd4a680f3bc99cdcda6af7bf1de
    diff --git a/fs/proc/base.c b/fs/proc/base.c
    index 1a39258..4bdc859 100644
    --- a/fs/proc/base.c
    +++ b/fs/proc/base.c
    @@ -489,67 +489,6 @@ static int proc_oom_score(struct task_st
    /* Here the fs part begins */
    /************************************************************************/

    -extern struct seq_operations proc_pid_maps_op;
    -static int maps_open(struct inode *inode, struct file *file)
    -{
    - struct task_struct *task = proc_task(inode);
    - int ret = seq_open(file, &proc_pid_maps_op);
    - if (!ret) {
    - struct seq_file *m = file->private_data;
    - m->private = task;
    - }
    - return ret;
    -}
    -
    -static struct file_operations proc_maps_operations = {
    - .open = maps_open,
    - .read = seq_read,
    - .llseek = seq_lseek,
    - .release = seq_release,
    -};
    -
    -#ifdef CONFIG_NUMA
    -extern struct seq_operations proc_pid_numa_maps_op;
    -static int numa_maps_open(struct inode *inode, struct file *file)
    -{
    - struct task_struct *task = proc_task(inode);
    - int ret = seq_open(file, &proc_pid_numa_maps_op);
    - if (!ret) {
    - struct seq_file *m = file->private_data;
    - m->private = task;
    - }
    - return ret;
    -}
    -
    -static struct file_operations proc_numa_maps_operations = {
    - .open = numa_maps_open,
    - .read = seq_read,
    - .llseek = seq_lseek,
    - .release = seq_release,
    -};
    -#endif
    -
    -#ifdef CONFIG_MMU
    -extern struct seq_operations proc_pid_smaps_op;
    -static int smaps_open(struct inode *inode, struct file *file)
    -{
    - struct task_struct *task = proc_task(inode);
    - int ret = seq_open(file, &proc_pid_smaps_op);
    - if (!ret) {
    - struct seq_file *m = file->private_data;
    - m->private = task;
    - }
    - return ret;
    -}
    -
    -static struct file_operations proc_smaps_operations = {
    - .open = smaps_open,
    - .read = seq_read,
    - .llseek = seq_lseek,
    - .release = seq_release,
    -};
    -#endif
    -
    extern struct seq_operations mounts_op;
    struct proc_mounts {
    struct seq_file m;
    diff --git a/fs/proc/internal.h b/fs/proc/internal.h
    index 8ea21d3..ac95bfc 100644
    --- a/fs/proc/internal.h
    +++ b/fs/proc/internal.h
    @@ -37,6 +37,10 @@ extern int proc_tgid_stat(struct task_st
    extern int proc_pid_status(struct task_struct *, char *);
    extern int proc_pid_statm(struct task_struct *, char *);

    +extern struct file_operations proc_maps_operations;
    +extern struct file_operations proc_numa_maps_operations;
    +extern struct file_operations proc_smaps_operations;
    +
    void free_proc_entry(struct proc_dir_entry *de);

    int proc_init_inodecache(void);
    diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
    index 0eaad41..56cd932 100644
    --- a/fs/proc/task_mmu.c
    +++ b/fs/proc/task_mmu.c
    @@ -375,27 +375,75 @@ static void *m_next(struct seq_file *m,
    return (vma != tail_vma)? tail_vma: NULL;
    }

    -struct seq_operations proc_pid_maps_op = {
    +static struct seq_operations proc_pid_maps_op = {
    .start = m_start,
    .next = m_next,
    .stop = m_stop,
    .show = show_map
    };

    -struct seq_operations proc_pid_smaps_op = {
    +static struct seq_operations proc_pid_smaps_op = {
    .start = m_start,
    .next = m_next,
    .stop = m_stop,
    .show = show_smap
    };

    +static int do_maps_open(struct inode *inode, struct file *file,
    + struct seq_operations *ops)
    +{
    + struct task_struct *task = proc_task(inode);
    + int ret = seq_open(file, ops);
    + if (!ret) {
    + struct seq_file *m = file->private_data;
    + m->private = task;
    + }
    + return ret;
    +}
    +
    +static int maps_open(struct inode *inode, struct file *file)
    +{
    + return do_maps_open(inode, file, &proc_pid_maps_op);
    +}
    +
    +struct file_operations proc_maps_operations = {
    + .open = maps_open,
    + .read = seq_read,
    + .llseek = seq_lseek,
    + .release = seq_release,
    +};
    +
    #ifdef CONFIG_NUMA
    extern int show_numa_map(struct seq_file *m, void *v);

    -struct seq_operations proc_pid_numa_maps_op = {
    +static struct seq_operations proc_pid_numa_maps_op = {
    .start = m_start,
    .next = m_next,
    .stop = m_stop,
    .show = show_numa_map
    };
    +
    +static int numa_maps_open(struct inode *inode, struct file *file)
    +{
    + return do_maps_open(inode, file, &proc_pid_numa_maps_op);
    +}
    +
    +struct file_operations proc_numa_maps_operations = {
    + .open = numa_maps_open,
    + .read = seq_read,
    + .llseek = seq_lseek,
    + .release = seq_release,
    +};
    #endif
    +
    +static int smaps_open(struct inode *inode, struct file *file)
    +{
    + return do_maps_open(inode, file, &proc_pid_smaps_op);
    +}
    +
    +struct file_operations proc_smaps_operations = {
    + .open = smaps_open,
    + .read = seq_read,
    + .llseek = seq_lseek,
    + .release = seq_release,
    +};
    diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
    index 8f68827..af69f28 100644
    --- a/fs/proc/task_nommu.c
    +++ b/fs/proc/task_nommu.c
    @@ -156,9 +156,28 @@ static void *m_next(struct seq_file *m,
    {
    return NULL;
    }
    -struct seq_operations proc_pid_maps_op = {
    +static struct seq_operations proc_pid_maps_op = {
    .start = m_start,
    .next = m_next,
    .stop = m_stop,
    .show = show_map
    };
    +
    +static int maps_open(struct inode *inode, struct file *file)
    +{
    + int ret;
    + ret = seq_open(file, &proc_pid_maps_op);
    + if (!ret) {
    + struct seq_file *m = file->private_data;
    + m->private = NULL;
    + }
    + return ret;
    +}
    +
    +struct file_operations proc_maps_operations = {
    + .open = maps_open,
    + .read = seq_read,
    + .llseek = seq_lseek,
    + .release = seq_release,
    +};
    +
    --
    1.2.2.g709a
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-02-23 17:16    [W:3.161 / U:0.488 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site