[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: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
6e66b52bf5
commit
662795deb8
@ -539,67 +539,6 @@ out:
|
|||||||
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 *);
|
|||||||
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)
|
|||||||
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)
|
|||||||
{
|
{
|
||||||
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,
|
||||||
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user