All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] sysfs poll should keep the poll rule of normal regular file.
@ 2009-04-08  8:43 KOSAKI Motohiro
  2009-04-09  0:15 ` Neil Brown
  0 siblings, 1 reply; 6+ messages in thread
From: KOSAKI Motohiro @ 2009-04-08  8:43 UTC (permalink / raw)
  To: Neil Brown, Greg Kroah-Hartman, LKML; +Cc: kosaki.motohiro


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.

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)



^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-04-09  6:06 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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

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.