From: Grant Grundler <grundler@parisc-linux.org>
To: Alexey Dobriyan <adobriyan@gmail.com>
Cc: kyle@mcmartin.ca, akpm@linux-foundation.org,
linux-parisc@vger.kernel.org
Subject: Re: [PATCH] parisc: convert /proc/pdc/{lcd,led} to seq_file
Date: Fri, 27 Nov 2009 23:13:54 -0700 [thread overview]
Message-ID: <20091128061354.GA21113@lackof.org> (raw)
In-Reply-To: <20091127065112.GC26327@x200.malnet.ru>
On Fri, Nov 27, 2009 at 09:51:12AM +0300, Alexey Dobriyan wrote:
> Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
No commit comment?
> ---
>
> drivers/parisc/led.c | 59 +++++++++++++++++++++++++--------------------------
> 1 file changed, 29 insertions(+), 30 deletions(-)
>
> --- a/drivers/parisc/led.c
> +++ b/drivers/parisc/led.c
> @@ -38,6 +38,7 @@
> #include <linux/kernel_stat.h>
> #include <linux/reboot.h>
> #include <linux/proc_fs.h>
> +#include <linux/seq_file.h>
> #include <linux/ctype.h>
> #include <linux/blkdev.h>
> #include <linux/workqueue.h>
> @@ -147,41 +148,34 @@ device_initcall(start_task);
> static void (*led_func_ptr) (unsigned char) __read_mostly;
>
> #ifdef CONFIG_PROC_FS
> -static int led_proc_read(char *page, char **start, off_t off, int count,
> - int *eof, void *data)
> +static int led_proc_show(struct seq_file *m, void *v)
> {
> - char *out = page;
> - int len;
> -
> - switch ((long)data)
> + switch ((long)m->private)
> {
> case LED_NOLCD:
> - out += sprintf(out, "Heartbeat: %d\n", led_heartbeat);
> - out += sprintf(out, "Disk IO: %d\n", led_diskio);
> - out += sprintf(out, "LAN Rx/Tx: %d\n", led_lanrxtx);
> + seq_printf(m, "Heartbeat: %d\n", led_heartbeat);
> + seq_printf(m, "Disk IO: %d\n", led_diskio);
> + seq_printf(m, "LAN Rx/Tx: %d\n", led_lanrxtx);
> break;
> case LED_HASLCD:
> - out += sprintf(out, "%s\n", lcd_text);
> + seq_printf(m, "%s\n", lcd_text);
> break;
> default:
> - *eof = 1;
> return 0;
> }
> + return 0;
> +}
>
> - len = out - page - off;
> - if (len < count) {
> - *eof = 1;
> - if (len <= 0) return 0;
> - } else {
> - len = count;
> - }
> - *start = page + off;
> - return len;
> +static int led_proc_open(struct inode *inode, struct file *file)
> +{
> + return single_open(file, led_proc_show, PDE(inode)->data);
> }
>
> -static int led_proc_write(struct file *file, const char *buf,
> - unsigned long count, void *data)
> +
> +static ssize_t led_proc_write(struct file *file, const char *buf,
> + size_t count, loff_t *pos)
> {
> + void *data = PDE(file->f_path.dentry->d_inode)->data;
> char *cur, lbuf[count + 1];
> int d;
>
> @@ -234,6 +228,15 @@ parse_error:
> return -EINVAL;
> }
>
> +static const struct file_operations led_proc_fops = {
> + .owner = THIS_MODULE,
> + .open = led_proc_open,
> + .read = seq_read,
> + .llseek = seq_lseek,
> + .release = single_release,
> + .write = led_proc_write,
> +};
> +
> static int __init led_create_procfs(void)
> {
> struct proc_dir_entry *proc_pdc_root = NULL;
> @@ -243,19 +246,15 @@ static int __init led_create_procfs(void)
>
> proc_pdc_root = proc_mkdir("pdc", 0);
> if (!proc_pdc_root) return -1;
> - ent = create_proc_entry("led", S_IFREG|S_IRUGO|S_IWUSR, proc_pdc_root);
> + ent = proc_create_data("led", S_IRUGO|S_IWUSR, proc_pdc_root,
> + &led_proc_fops, (void *)LED_NOLCD); /* LED */
Documentation/filesystems/seq_file.txt says to use create_proc_entry().
I couldn't find any documentation on proc_create_data().
Is this really the preferred API?
I reviewed the code and it looks fine to me otherwise.
Reviewed-by: Grant Grundler <grundler@parisc-linux.org>
cheers,
grant
> if (!ent) return -1;
> - ent->data = (void *)LED_NOLCD; /* LED */
> - ent->read_proc = led_proc_read;
> - ent->write_proc = led_proc_write;
>
> if (led_type == LED_HASLCD)
> {
> - ent = create_proc_entry("lcd", S_IFREG|S_IRUGO|S_IWUSR, proc_pdc_root);
> + ent = proc_create_data("lcd", S_IRUGO|S_IWUSR, proc_pdc_root,
> + &led_proc_fops, (void *)LED_HASLCD); /* LCD */
> if (!ent) return -1;
> - ent->data = (void *)LED_HASLCD; /* LCD */
> - ent->read_proc = led_proc_read;
> - ent->write_proc = led_proc_write;
> }
>
> return 0;
> --
> To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2009-11-28 6:13 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-27 6:51 [PATCH] parisc: convert /proc/pdc/{lcd,led} to seq_file Alexey Dobriyan
2009-11-28 6:13 ` Grant Grundler [this message]
2009-11-28 9:25 ` Alexey Dobriyan
2009-11-28 14:45 ` James Bottomley
2009-11-29 5:17 ` Grant Grundler
2009-12-01 22:07 ` Andrew Morton
2009-12-05 0:39 ` Alexey Dobriyan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20091128061354.GA21113@lackof.org \
--to=grundler@parisc-linux.org \
--cc=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=kyle@mcmartin.ca \
--cc=linux-parisc@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).