aboutsummaryrefslogtreecommitdiffstats
path: root/fs/proc/proc_misc.c
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@openvz.org>2007-10-01 17:41:15 -0400
committerJ. Bruce Fields <bfields@citi.umich.edu>2007-10-09 18:32:46 -0400
commit7f8ada98d9edd83d6ebd01e431e15b024a4a3dc4 (patch)
tree1231947efa06478714eeabac3bdbffc663f453c7 /fs/proc/proc_misc.c
parent094f2825218fec1b240cb8537d2d0a10edf5ddc9 (diff)
Rework /proc/locks via seq_files and seq_list helpers
Currently /proc/locks is shown with a proc_read function, but its behavior is rather complex as it has to manually handle current offset and buffer length. On the other hand, files that show objects from lists can be easily reimplemented using the sequential files and the seq_list_XXX() helpers. This saves (as usually) 16 lines of code and more than 200 from the .text section. [akpm@linux-foundation.org: no externs in C] [akpm@linux-foundation.org: warning fixes] Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Cc: "J. Bruce Fields" <bfields@fieldses.org> Cc: Trond Myklebust <trond.myklebust@fys.uio.no> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'fs/proc/proc_misc.c')
-rw-r--r--fs/proc/proc_misc.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/fs/proc/proc_misc.c b/fs/proc/proc_misc.c
index bee251cb87c8..c9d6d5f400ad 100644
--- a/fs/proc/proc_misc.c
+++ b/fs/proc/proc_misc.c
@@ -66,7 +66,6 @@ extern int get_stram_list(char *);
66extern int get_filesystem_list(char *); 66extern int get_filesystem_list(char *);
67extern int get_exec_domain_list(char *); 67extern int get_exec_domain_list(char *);
68extern int get_dma_list(char *); 68extern int get_dma_list(char *);
69extern int get_locks_status (char *, char **, off_t, int);
70 69
71static int proc_calc_metrics(char *page, char **start, off_t off, 70static int proc_calc_metrics(char *page, char **start, off_t off,
72 int count, int *eof, int len) 71 int count, int *eof, int len)
@@ -617,16 +616,18 @@ static int cmdline_read_proc(char *page, char **start, off_t off,
617 return proc_calc_metrics(page, start, off, count, eof, len); 616 return proc_calc_metrics(page, start, off, count, eof, len);
618} 617}
619 618
620static int locks_read_proc(char *page, char **start, off_t off, 619static int locks_open(struct inode *inode, struct file *filp)
621 int count, int *eof, void *data)
622{ 620{
623 int len = get_locks_status(page, start, off, count); 621 return seq_open(filp, &locks_seq_operations);
624
625 if (len < count)
626 *eof = 1;
627 return len;
628} 622}
629 623
624static const struct file_operations proc_locks_operations = {
625 .open = locks_open,
626 .read = seq_read,
627 .llseek = seq_lseek,
628 .release = seq_release,
629};
630
630static int execdomains_read_proc(char *page, char **start, off_t off, 631static int execdomains_read_proc(char *page, char **start, off_t off,
631 int count, int *eof, void *data) 632 int count, int *eof, void *data)
632{ 633{
@@ -684,7 +685,6 @@ void __init proc_misc_init(void)
684#endif 685#endif
685 {"filesystems", filesystems_read_proc}, 686 {"filesystems", filesystems_read_proc},
686 {"cmdline", cmdline_read_proc}, 687 {"cmdline", cmdline_read_proc},
687 {"locks", locks_read_proc},
688 {"execdomains", execdomains_read_proc}, 688 {"execdomains", execdomains_read_proc},
689 {NULL,} 689 {NULL,}
690 }; 690 };
@@ -702,6 +702,7 @@ void __init proc_misc_init(void)
702 entry->proc_fops = &proc_kmsg_operations; 702 entry->proc_fops = &proc_kmsg_operations;
703 } 703 }
704#endif 704#endif
705 create_seq_entry("locks", 0, &proc_locks_operations);
705 create_seq_entry("devices", 0, &proc_devinfo_operations); 706 create_seq_entry("devices", 0, &proc_devinfo_operations);
706 create_seq_entry("cpuinfo", 0, &proc_cpuinfo_operations); 707 create_seq_entry("cpuinfo", 0, &proc_cpuinfo_operations);
707#ifdef CONFIG_BLOCK 708#ifdef CONFIG_BLOCK