linux-parisc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

  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).