All of lore.kernel.org
 help / color / mirror / Atom feed
From: Neil Brown <neilb@suse.de>
To: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Greg Kroah-Hartman <gregkh@suse.de>,
	LKML <linux-kernel@vger.kernel.org>,
	Al Viro <viro@ZenIV.linux.org.uk>
Subject: Re: [PATCH] sysfs poll should keep the poll rule of normal regular file.
Date: Thu, 9 Apr 2009 10:15:28 +1000	[thread overview]
Message-ID: <18909.15904.704697.734477@notabene.brown> (raw)
In-Reply-To: message from KOSAKI Motohiro on Wednesday April 8

On Wednesday April 8, kosaki.motohiro@jp.fujitsu.com wrote:
> 
> Currently, following test programs don't finished.
> 
> % ruby -e '
> Thread.new { sleep }
> File.read("/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies")
> '
> 
> strace expose the reason.
> 
> ...
> open("/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies", O_RDONLY|O_LARGEFILE) = 3
> ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbf9fa6b8) = -1 ENOTTY (Inappropriate ioctl for device)
> fstat64(3, {st_mode=S_IFREG|0444, st_size=4096, ...}) = 0
> _llseek(3, 0, [0], SEEK_CUR)            = 0
> select(4, [3], NULL, NULL, NULL)        = 1 (in [3])
> read(3, "1400000 1300000 1200000 1100000 1"..., 4096) = 62
> select(4, [3], NULL, NULL, NULL
> 
> 
> Because Ruby (the scripting language) VM assume select system-call against regular file don't block.
> (POSIX gurantee it.)
> But sysfs_poll() don't keep this rule although sysfs file can read and write always.

It would be nice to include a reference to where POSIX (or SUS)
guarantees it - though I suspect you are right.

I have one piece of code that this would break, but it isn't released
yet and it is never too late to fix things..

However it should be pointed out that /proc/mounts has exactly the
same problems (/proc/mdstat doesn't - I guess I was lucky enough to
get that one right).  So we should "fix" /proc/mounts
(fs/proc/base.c:mounts_poll) at the same time.  Assuming that won't
break anything.

Al:  do you have an opinion about changing mounts_poll to always
report 'readable' to poll??  What would break?

NeilBrown

> 
> This patch restore proper poll behavior to sysfs.
> /sys/block/md*/md/sync_action polling application and another sysfs updating sensitive
> application still can use POLLERR and POLLPRI.
> 
> 
> 
> Cc: Neil Brown <neilb@suse.de>
> Cc: Greg Kroah-Hartman <gregkh@suse.de>
> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
> --
>  fs/sysfs/file.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
> index 289c43a..4a302f8 100644
> --- a/fs/sysfs/file.c
> +++ b/fs/sysfs/file.c
> @@ -446,11 +446,11 @@ static unsigned int sysfs_poll(struct file *filp, poll_table *wait)
>  	if (buffer->event != atomic_read(&od->event))
>  		goto trigger;
>  
> -	return 0;
> +	return DEFAULT_POLLMASK;
>  
>   trigger:
>  	buffer->needs_read_fill = 1;
> -	return POLLERR|POLLPRI;
> +	return DEFAULT_POLLMASK|POLLERR|POLLPRI;
>  }
>  
>  void sysfs_notify_dirent(struct sysfs_dirent *sd)
> 

  reply	other threads:[~2009-04-09  0:16 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-08  8:43 [PATCH] sysfs poll should keep the poll rule of normal regular file KOSAKI Motohiro
2009-04-09  0:15 ` Neil Brown [this message]
2009-04-09  0:26   ` KOSAKI Motohiro
2009-04-09  4:53     ` [PATCH v2 1/2] sysfs poll keep the poll rule of " KOSAKI Motohiro
2009-04-09  4:57       ` [PATCH v2 2/2] mounts_poll() make consistent to mdstat_poll KOSAKI Motohiro
2009-04-09  6:05     ` [PATCH] sysfs poll should keep the poll rule of normal regular file Neil Brown

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=18909.15904.704697.734477@notabene.brown \
    --to=neilb@suse.de \
    --cc=gregkh@suse.de \
    --cc=kosaki.motohiro@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=viro@ZenIV.linux.org.uk \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.