aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2006-06-26 03:25:48 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-26 12:58:24 -0400
commit662795deb854b31501e0ffb42b7f0cce802c134a (patch)
treed4849ad5ca7383ca9d0c9b6d46db83097d5dba85
parent6e66b52bf587f0dd9a8e0a581b9570e5c1969e33 (diff)
[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>
-rw-r--r--fs/proc/base.c61
-rw-r--r--fs/proc/internal.h4
-rw-r--r--fs/proc/task_mmu.c54
-rw-r--r--fs/proc/task_nommu.c21
4 files changed, 75 insertions, 65 deletions
diff --git a/fs/proc/base.c b/fs/proc/base.c
index 29539c2268a3..c8636841bbcf 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -539,67 +539,6 @@ out:
539 goto exit; 539 goto exit;
540} 540}
541 541
542extern struct seq_operations proc_pid_maps_op;
543static int maps_open(struct inode *inode, struct file *file)
544{
545 struct task_struct *task = proc_task(inode);
546 int ret = seq_open(file, &proc_pid_maps_op);
547 if (!ret) {
548 struct seq_file *m = file->private_data;
549 m->private = task;
550 }
551 return ret;
552}
553
554static struct file_operations proc_maps_operations = {
555 .open = maps_open,
556 .read = seq_read,
557 .llseek = seq_lseek,
558 .release = seq_release,
559};
560
561#ifdef CONFIG_NUMA
562extern struct seq_operations proc_pid_numa_maps_op;
563static int numa_maps_open(struct inode *inode, struct file *file)
564{
565 struct task_struct *task = proc_task(inode);
566 int ret = seq_open(file, &proc_pid_numa_maps_op);
567 if (!ret) {
568 struct seq_file *m = file->private_data;
569 m->private = task;
570 }
571 return ret;
572}
573
574static struct file_operations proc_numa_maps_operations = {
575 .open = numa_maps_open,
576 .read = seq_read,
577 .llseek = seq_lseek,
578 .release = seq_release,
579};
580#endif
581
582#ifdef CONFIG_MMU
583extern struct seq_operations proc_pid_smaps_op;
584static int smaps_open(struct inode *inode, struct file *file)
585{
586 struct task_struct *task = proc_task(inode);
587 int ret = seq_open(file, &proc_pid_smaps_op);
588 if (!ret) {
589 struct seq_file *m = file->private_data;
590 m->private = task;
591 }
592 return ret;
593}
594
595static struct file_operations proc_smaps_operations = {
596 .open = smaps_open,
597 .read = seq_read,
598 .llseek = seq_lseek,
599 .release = seq_release,
600};
601#endif
602
603extern struct seq_operations mounts_op; 542extern struct seq_operations mounts_op;
604struct proc_mounts { 543struct proc_mounts {
605 struct seq_file m; 544 struct seq_file m;
diff --git a/fs/proc/internal.h b/fs/proc/internal.h
index 6264b7a3a9f0..548e7447ea47 100644
--- a/fs/proc/internal.h
+++ b/fs/proc/internal.h
@@ -37,6 +37,10 @@ extern int proc_tgid_stat(struct task_struct *, char *);
37extern int proc_pid_status(struct task_struct *, char *); 37extern int proc_pid_status(struct task_struct *, char *);
38extern int proc_pid_statm(struct task_struct *, char *); 38extern int proc_pid_statm(struct task_struct *, char *);
39 39
40extern struct file_operations proc_maps_operations;
41extern struct file_operations proc_numa_maps_operations;
42extern struct file_operations proc_smaps_operations;
43
40void free_proc_entry(struct proc_dir_entry *de); 44void free_proc_entry(struct proc_dir_entry *de);
41 45
42int proc_init_inodecache(void); 46int proc_init_inodecache(void);
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index 91b7c15ab373..4187b4e9cdb3 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -374,27 +374,75 @@ static void *m_next(struct seq_file *m, void *v, loff_t *pos)
374 return (vma != tail_vma)? tail_vma: NULL; 374 return (vma != tail_vma)? tail_vma: NULL;
375} 375}
376 376
377struct seq_operations proc_pid_maps_op = { 377static struct seq_operations proc_pid_maps_op = {
378 .start = m_start, 378 .start = m_start,
379 .next = m_next, 379 .next = m_next,
380 .stop = m_stop, 380 .stop = m_stop,
381 .show = show_map 381 .show = show_map
382}; 382};
383 383
384struct seq_operations proc_pid_smaps_op = { 384static struct seq_operations proc_pid_smaps_op = {
385 .start = m_start, 385 .start = m_start,
386 .next = m_next, 386 .next = m_next,
387 .stop = m_stop, 387 .stop = m_stop,
388 .show = show_smap 388 .show = show_smap
389}; 389};
390 390
391static int do_maps_open(struct inode *inode, struct file *file,
392 struct seq_operations *ops)
393{
394 struct task_struct *task = proc_task(inode);
395 int ret = seq_open(file, ops);
396 if (!ret) {
397 struct seq_file *m = file->private_data;
398 m->private = task;
399 }
400 return ret;
401}
402
403static int maps_open(struct inode *inode, struct file *file)
404{
405 return do_maps_open(inode, file, &proc_pid_maps_op);
406}
407
408struct file_operations proc_maps_operations = {
409 .open = maps_open,
410 .read = seq_read,
411 .llseek = seq_lseek,
412 .release = seq_release,
413};
414
391#ifdef CONFIG_NUMA 415#ifdef CONFIG_NUMA
392extern int show_numa_map(struct seq_file *m, void *v); 416extern int show_numa_map(struct seq_file *m, void *v);
393 417
394struct seq_operations proc_pid_numa_maps_op = { 418static struct seq_operations proc_pid_numa_maps_op = {
395 .start = m_start, 419 .start = m_start,
396 .next = m_next, 420 .next = m_next,
397 .stop = m_stop, 421 .stop = m_stop,
398 .show = show_numa_map 422 .show = show_numa_map
399}; 423};
424
425static int numa_maps_open(struct inode *inode, struct file *file)
426{
427 return do_maps_open(inode, file, &proc_pid_numa_maps_op);
428}
429
430struct file_operations proc_numa_maps_operations = {
431 .open = numa_maps_open,
432 .read = seq_read,
433 .llseek = seq_lseek,
434 .release = seq_release,
435};
400#endif 436#endif
437
438static int smaps_open(struct inode *inode, struct file *file)
439{
440 return do_maps_open(inode, file, &proc_pid_smaps_op);
441}
442
443struct file_operations proc_smaps_operations = {
444 .open = smaps_open,
445 .read = seq_read,
446 .llseek = seq_lseek,
447 .release = seq_release,
448};
diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
index 8f68827ed10e..af69f28277b6 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, void *v, loff_t *pos)
156{ 156{
157 return NULL; 157 return NULL;
158} 158}
159struct seq_operations proc_pid_maps_op = { 159static struct seq_operations proc_pid_maps_op = {
160 .start = m_start, 160 .start = m_start,
161 .next = m_next, 161 .next = m_next,
162 .stop = m_stop, 162 .stop = m_stop,
163 .show = show_map 163 .show = show_map
164}; 164};
165
166static int maps_open(struct inode *inode, struct file *file)
167{
168 int ret;
169 ret = seq_open(file, &proc_pid_maps_op);
170 if (!ret) {
171 struct seq_file *m = file->private_data;
172 m->private = NULL;
173 }
174 return ret;
175}
176
177struct file_operations proc_maps_operations = {
178 .open = maps_open,
179 .read = seq_read,
180 .llseek = seq_lseek,
181 .release = seq_release,
182};
183