提交 662795de 编写于 作者: E Eric W. Biederman 提交者: Linus Torvalds

[PATCH] proc: Move proc_maps_operations into task_mmu.c

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: NEric W. Biederman <ebiederm@xmission.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 6e66b52b
...@@ -539,67 +539,6 @@ static int proc_check_chroot(struct dentry *de, struct vfsmount *mnt) ...@@ -539,67 +539,6 @@ static int proc_check_chroot(struct dentry *de, struct vfsmount *mnt)
goto exit; goto exit;
} }
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; extern struct seq_operations mounts_op;
struct proc_mounts { struct proc_mounts {
struct seq_file m; struct seq_file m;
......
...@@ -37,6 +37,10 @@ extern int proc_tgid_stat(struct task_struct *, char *); ...@@ -37,6 +37,10 @@ extern int proc_tgid_stat(struct task_struct *, char *);
extern int proc_pid_status(struct task_struct *, char *); extern int proc_pid_status(struct task_struct *, char *);
extern int proc_pid_statm(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); void free_proc_entry(struct proc_dir_entry *de);
int proc_init_inodecache(void); int proc_init_inodecache(void);
......
...@@ -374,27 +374,75 @@ static void *m_next(struct seq_file *m, void *v, loff_t *pos) ...@@ -374,27 +374,75 @@ static void *m_next(struct seq_file *m, void *v, loff_t *pos)
return (vma != tail_vma)? tail_vma: NULL; 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, .start = m_start,
.next = m_next, .next = m_next,
.stop = m_stop, .stop = m_stop,
.show = show_map .show = show_map
}; };
struct seq_operations proc_pid_smaps_op = { static struct seq_operations proc_pid_smaps_op = {
.start = m_start, .start = m_start,
.next = m_next, .next = m_next,
.stop = m_stop, .stop = m_stop,
.show = show_smap .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 #ifdef CONFIG_NUMA
extern int show_numa_map(struct seq_file *m, void *v); 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, .start = m_start,
.next = m_next, .next = m_next,
.stop = m_stop, .stop = m_stop,
.show = show_numa_map .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 #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,
};
...@@ -156,9 +156,28 @@ static void *m_next(struct seq_file *m, void *v, loff_t *pos) ...@@ -156,9 +156,28 @@ static void *m_next(struct seq_file *m, void *v, loff_t *pos)
{ {
return NULL; return NULL;
} }
struct seq_operations proc_pid_maps_op = { static struct seq_operations proc_pid_maps_op = {
.start = m_start, .start = m_start,
.next = m_next, .next = m_next,
.stop = m_stop, .stop = m_stop,
.show = show_map .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,
};
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册