Merge branch 'proc-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/adobriyan/proc

* 'proc-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/adobriyan/proc:
proc: revert /proc/uptime to ->read_proc hook

+20 -18
+20 -18
fs/proc/uptime.c
··· 1 - #include <linux/fs.h> 2 1 #include <linux/init.h> 3 2 #include <linux/proc_fs.h> 4 3 #include <linux/sched.h> 5 - #include <linux/seq_file.h> 6 4 #include <linux/time.h> 7 5 #include <asm/cputime.h> 8 6 9 - static int uptime_proc_show(struct seq_file *m, void *v) 7 + static int proc_calc_metrics(char *page, char **start, off_t off, 8 + int count, int *eof, int len) 9 + { 10 + if (len <= off + count) 11 + *eof = 1; 12 + *start = page + off; 13 + len -= off; 14 + if (len > count) 15 + len = count; 16 + if (len < 0) 17 + len = 0; 18 + return len; 19 + } 20 + 21 + static int uptime_read_proc(char *page, char **start, off_t off, int count, 22 + int *eof, void *data) 10 23 { 11 24 struct timespec uptime; 12 25 struct timespec idle; 26 + int len; 13 27 cputime_t idletime = cputime_add(init_task.utime, init_task.stime); 14 28 15 29 do_posix_clock_monotonic_gettime(&uptime); 16 30 monotonic_to_bootbased(&uptime); 17 31 cputime_to_timespec(idletime, &idle); 18 - seq_printf(m, "%lu.%02lu %lu.%02lu\n", 32 + len = sprintf(page, "%lu.%02lu %lu.%02lu\n", 19 33 (unsigned long) uptime.tv_sec, 20 34 (uptime.tv_nsec / (NSEC_PER_SEC / 100)), 21 35 (unsigned long) idle.tv_sec, 22 36 (idle.tv_nsec / (NSEC_PER_SEC / 100))); 23 - return 0; 37 + return proc_calc_metrics(page, start, off, count, eof, len); 24 38 } 25 - 26 - static int uptime_proc_open(struct inode *inode, struct file *file) 27 - { 28 - return single_open(file, uptime_proc_show, NULL); 29 - } 30 - 31 - static const struct file_operations uptime_proc_fops = { 32 - .open = uptime_proc_open, 33 - .read = seq_read, 34 - .llseek = seq_lseek, 35 - .release = single_release, 36 - }; 37 39 38 40 static int __init proc_uptime_init(void) 39 41 { 40 - proc_create("uptime", 0, NULL, &uptime_proc_fops); 42 + create_proc_read_entry("uptime", 0, NULL, uptime_read_proc, NULL); 41 43 return 0; 42 44 } 43 45 module_init(proc_uptime_init);