From 542aeada0dd544b751c689a8a530e5c915cd7e4e Mon Sep 17 00:00:00 2001 From: Luis Ortega Perez de Villar Date: Fri, 19 Jul 2013 13:17:35 +0200 Subject: Don't use create_proc_entry() and create_proc_read_entry() Don't use create_proc_entry() and create_proc_read_entry() as they are deprecated, but rather use proc_create() and proc_create_data() respectively and seq_file instead. --- scull/pipe.c | 66 ++++++++++++++++++++++++++++-------------------------------- 1 file changed, 31 insertions(+), 35 deletions(-) (limited to 'scull/pipe.c') diff --git a/scull/pipe.c b/scull/pipe.c index cba06a3..3e7b8cd 100644 --- a/scull/pipe.c +++ b/scull/pipe.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "scull.h" /* local definitions */ @@ -262,46 +263,40 @@ static int scull_p_fasync(int fd, struct file *filp, int mode) /* FIXME this should use seq_file */ #ifdef SCULL_DEBUG -static void scullp_proc_offset(char *buf, char **start, off_t *offset, int *len) + +static int scull_read_p_mem(struct seq_file *s, void *v) { - if (*offset == 0) - return; - if (*offset >= *len) { /* Not there yet */ - *offset -= *len; - *len = 0; - } - else { /* We're into the interesting stuff now */ - *start = buf + *offset; - *offset = 0; - } + int i; + struct scull_pipe *p; + +#define LIMIT (PAGE_SIZE-200) /* don't print any more after this size */ + seq_printf(s, "Default buffersize is %i\n", scull_p_buffer); + for(i = 0; icount <= LIMIT; i++) { + p = &scull_p_devices[i]; + if (down_interruptible(&p->sem)) + return -ERESTARTSYS; + seq_printf(s, "\nDevice %i: %p\n", i, p); +/* seq_printf(s, " Queues: %p %p\n", p->inq, p->outq);*/ + seq_printf(s, " Buffer: %p to %p (%i bytes)\n", p->buffer, p->end, p->buffersize); + seq_printf(s, " rp %p wp %p\n", p->rp, p->wp); + seq_printf(s, " readers %i writers %i\n", p->nreaders, p->nwriters); + up(&p->sem); + } + return 0; } - -static int scull_read_p_mem(char *buf, char **start, off_t offset, int count, - int *eof, void *data) +static int scullpipe_proc_open(struct inode *inode, struct file *file) { - int i, len; - struct scull_pipe *p; - -#define LIMIT (PAGE_SIZE-200) /* don't print any more after this size */ - *start = buf; - len = sprintf(buf, "Default buffersize is %i\n", scull_p_buffer); - for(i = 0; isem)) - return -ERESTARTSYS; - len += sprintf(buf+len, "\nDevice %i: %p\n", i, p); -/* len += sprintf(buf+len, " Queues: %p %p\n", p->inq, p->outq);*/ - len += sprintf(buf+len, " Buffer: %p to %p (%i bytes)\n", p->buffer, p->end, p->buffersize); - len += sprintf(buf+len, " rp %p wp %p\n", p->rp, p->wp); - len += sprintf(buf+len, " readers %i writers %i\n", p->nreaders, p->nwriters); - up(&p->sem); - scullp_proc_offset(buf, start, &offset, &len); - } - *eof = (len <= LIMIT); - return len; + return single_open(file, scull_read_p_mem, NULL); } +static struct file_operations scullpipe_proc_ops = { + .owner = THIS_MODULE, + .open = scullpipe_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release +}; #endif @@ -367,7 +362,8 @@ int scull_p_init(dev_t firstdev) scull_p_setup_cdev(scull_p_devices + i, i); } #ifdef SCULL_DEBUG - create_proc_read_entry("scullpipe", 0, NULL, scull_read_p_mem, NULL); + //create_proc_read_entry("scullpipe", 0, NULL, scull_read_p_mem, NULL); + proc_create("scullpipe", 0, NULL, &scullpipe_proc_ops); #endif return scull_p_nr_devs; } -- cgit v1.2.1-18-gbd029