diff options
-rw-r--r-- | fs/proc/Makefile | 1 | ||||
-rw-r--r-- | fs/proc/proc_misc.c | 13 | ||||
-rw-r--r-- | fs/proc/version.c | 34 |
3 files changed, 35 insertions, 13 deletions
diff --git a/fs/proc/Makefile b/fs/proc/Makefile index 70607a03839d..97985c848ac3 100644 --- a/fs/proc/Makefile +++ b/fs/proc/Makefile | |||
@@ -12,6 +12,7 @@ proc-y += inode.o root.o base.o generic.o array.o \ | |||
12 | proc-y += loadavg.o | 12 | proc-y += loadavg.o |
13 | proc-y += meminfo.o | 13 | proc-y += meminfo.o |
14 | proc-y += uptime.o | 14 | proc-y += uptime.o |
15 | proc-y += version.o | ||
15 | proc-$(CONFIG_PROC_SYSCTL) += proc_sysctl.o | 16 | proc-$(CONFIG_PROC_SYSCTL) += proc_sysctl.o |
16 | proc-$(CONFIG_NET) += proc_net.o | 17 | proc-$(CONFIG_NET) += proc_net.o |
17 | proc-$(CONFIG_PROC_KCORE) += kcore.o | 18 | proc-$(CONFIG_PROC_KCORE) += kcore.o |
diff --git a/fs/proc/proc_misc.c b/fs/proc/proc_misc.c index 1aba51b0a0c4..4814b111d836 100644 --- a/fs/proc/proc_misc.c +++ b/fs/proc/proc_misc.c | |||
@@ -115,18 +115,6 @@ static const struct file_operations proc_zoneinfo_file_operations = { | |||
115 | .release = seq_release, | 115 | .release = seq_release, |
116 | }; | 116 | }; |
117 | 117 | ||
118 | static int version_read_proc(char *page, char **start, off_t off, | ||
119 | int count, int *eof, void *data) | ||
120 | { | ||
121 | int len; | ||
122 | |||
123 | len = snprintf(page, PAGE_SIZE, linux_proc_banner, | ||
124 | utsname()->sysname, | ||
125 | utsname()->release, | ||
126 | utsname()->version); | ||
127 | return proc_calc_metrics(page, start, off, count, eof, len); | ||
128 | } | ||
129 | |||
130 | extern const struct seq_operations cpuinfo_op; | 118 | extern const struct seq_operations cpuinfo_op; |
131 | static int cpuinfo_open(struct inode *inode, struct file *file) | 119 | static int cpuinfo_open(struct inode *inode, struct file *file) |
132 | { | 120 | { |
@@ -680,7 +668,6 @@ void __init proc_misc_init(void) | |||
680 | char *name; | 668 | char *name; |
681 | int (*read_proc)(char*,char**,off_t,int,int*,void*); | 669 | int (*read_proc)(char*,char**,off_t,int,int*,void*); |
682 | } *p, simple_ones[] = { | 670 | } *p, simple_ones[] = { |
683 | {"version", version_read_proc}, | ||
684 | #ifdef CONFIG_PROC_HARDWARE | 671 | #ifdef CONFIG_PROC_HARDWARE |
685 | {"hardware", hardware_read_proc}, | 672 | {"hardware", hardware_read_proc}, |
686 | #endif | 673 | #endif |
diff --git a/fs/proc/version.c b/fs/proc/version.c new file mode 100644 index 000000000000..76817a60678c --- /dev/null +++ b/fs/proc/version.c | |||
@@ -0,0 +1,34 @@ | |||
1 | #include <linux/fs.h> | ||
2 | #include <linux/init.h> | ||
3 | #include <linux/kernel.h> | ||
4 | #include <linux/proc_fs.h> | ||
5 | #include <linux/seq_file.h> | ||
6 | #include <linux/utsname.h> | ||
7 | |||
8 | static int version_proc_show(struct seq_file *m, void *v) | ||
9 | { | ||
10 | seq_printf(m, linux_proc_banner, | ||
11 | utsname()->sysname, | ||
12 | utsname()->release, | ||
13 | utsname()->version); | ||
14 | return 0; | ||
15 | } | ||
16 | |||
17 | static int version_proc_open(struct inode *inode, struct file *file) | ||
18 | { | ||
19 | return single_open(file, version_proc_show, NULL); | ||
20 | } | ||
21 | |||
22 | static const struct file_operations version_proc_fops = { | ||
23 | .open = version_proc_open, | ||
24 | .read = seq_read, | ||
25 | .llseek = seq_lseek, | ||
26 | .release = single_release, | ||
27 | }; | ||
28 | |||
29 | static int __init proc_version_init(void) | ||
30 | { | ||
31 | proc_create("version", 0, NULL, &version_proc_fops); | ||
32 | return 0; | ||
33 | } | ||
34 | module_init(proc_version_init); | ||