linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] block: don't propagate unlisted DISK_EVENTs to userland
@ 2011-04-21 17:08 Tejun Heo
  2011-04-21 17:09 ` [PATCH 2/2] ide: unexport DISK_EVENT_MEDIA_CHANGE for ide-gd and ide-cd Tejun Heo
  2011-04-21 17:25 ` [PATCH 1/2] block: don't propagate unlisted DISK_EVENTs to userland Linus Torvalds
  0 siblings, 2 replies; 9+ messages in thread
From: Tejun Heo @ 2011-04-21 17:08 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Linus Torvalds, Christoph Hellwig, Neil Brown, David S. Miller,
	linux-kernel, linux-ide, kay.sievers

DISK_EVENT_MEDIA_CHANGE is used for both userland visible event and
internal event for revalidation of removeable devices.  Some legacy
drivers don't implement proper event detection and continuously
generate events under certain circumstances.  For example, ide-cd
generates media changed continuously if there's no media in the drive,
which can lead to infinite loop of events jumping back and forth
between the driver and userland event handler.

This patch updates disk event infrastructure such that it never
propagates events not listed in disk->events to userland.  Those
events are processed the same for internal purposes but uevent
generation is suppressed.

This also ensures that userland only gets events which are advertised
in the @events sysfs node lowering risk of confusion.

Signed-off-by: Tejun Heo <tj@kernel.org>
---
These two patches fix infinite MEDIA_CHANGE events problem reported w/
ide-cd.  I tried an alternate patch to implement proper check_events()
for ide-cd but given the deprecated status of ide and the existence of
fallback userland event polling, this minimal approach seems better.

Thank you.

 block/genhd.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Index: work/block/genhd.c
===================================================================
--- work.orig/block/genhd.c
+++ work/block/genhd.c
@@ -1588,9 +1588,13 @@ static void disk_events_workfn(struct wo
 
 	spin_unlock_irq(&ev->lock);
 
-	/* tell userland about new events */
+	/*
+	 * Tell userland about new events.  Only the events listed in
+	 * @disk->events are reported.  Unlisted events are processed the
+	 * same internally but never get reported to userland.
+	 */
 	for (i = 0; i < ARRAY_SIZE(disk_uevents); i++)
-		if (events & (1 << i))
+		if (events & disk->events & (1 << i))
 			envp[nr_events++] = disk_uevents[i];
 
 	if (nr_events)

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

end of thread, other threads:[~2011-04-21 18:10 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-21 17:08 [PATCH 1/2] block: don't propagate unlisted DISK_EVENTs to userland Tejun Heo
2011-04-21 17:09 ` [PATCH 2/2] ide: unexport DISK_EVENT_MEDIA_CHANGE for ide-gd and ide-cd Tejun Heo
2011-04-21 17:14   ` David Miller
2011-04-21 17:25 ` [PATCH 1/2] block: don't propagate unlisted DISK_EVENTs to userland Linus Torvalds
2011-04-21 17:27   ` David Miller
2011-04-21 17:31   ` Jens Axboe
2011-04-21 17:46     ` Jens Axboe
2011-04-21 18:02     ` Shaun Ruffell
2011-04-21 18:10       ` Jens Axboe

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