linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* cd-tray immediately closed after it has been opened
@ 2008-07-27 19:19 Christian Krause
  2008-07-27 23:35 ` David Zeuthen
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: Christian Krause @ 2008-07-27 19:19 UTC (permalink / raw)
  To: linux-hotplug

Hi,

A very annoying bug has been introduced in udev release 121:

In some distribution it is not possible to eject a CD or DVD anymore, 
because the cd tray is immediately closed after it has been opened:

http://bugs.gentoo.org/show_bug.cgi?id#0886
https://bugzilla.redhat.com/show_bug.cgi?idE3095


We have tracked down the problem:

udev 120: works
udev > 121: problem occurs

The following checkin introduced the odd behaviour:
41677cf51fb2c14aa512ecf9410e43eb35560408
"persistent device naming: also read unpartitioned media"
with the following change in 60-persistent-storage.rules:
----------------------------------------------------------
+# import filesystem metadata
+IMPORT{program}="vol_id --export $tempnode"
----------------------------------------------------------

The following happens:

- the CD is ejected (by user)
- a change event is generated:
UDEV  [1217184249.757495] change   
/devices/pci0000:00/0000:00:1f.2/host2/target2:0:0/2:0:0:0/block/sr0 (block)
- the rule above triggers the execution of "vol_id --export ...sr0"
- vol_id opens the device with open(2), which causes the cd tray to be 
closed

Before this checkin, vol_id was only called for partitioned devices and 
so the CD tray stayed open.


I'm not an expert in writing udev rules, but I'm using now the following 
workaround:

diff --git a/rules/rules.d/60-persistent-storage.rules 
b/rules/rules.d/60-persistent-storage.rules
index 5ae0c7f..95eb1fd 100644
--- a/rules/rules.d/60-persistent-storage.rules
+++ b/rules/rules.d/60-persistent-storage.rules
@@ -52,6 +52,7 @@ ENV{DEVTYPE}="partition", ENV{ID_PATH}="?*", 
SYMLINK+="disk/by-path/$env{ID_PA

 # skip unpartitioned removable media devices from drivers which do not 
send "change" events
 ENV{DEVTYPE}="disk", KERNEL!="sd*|sr*", ATTR{removable}="1", 
GOTO="persistent_storage_end"
+ENV{DEVTYPE}="disk", KERNEL="sr*", ATTR{removable}="1", 
GOTO="persistent_storage_end"

 # import filesystem metadata
 IMPORT{program}="vol_id --export $tempnode"


If this patch is used, the vol_id call is omitted for sr* devices.

Sure, a drawback is, that you loose the "disk/by-label" link for CDs, 
but IMHO these features are mainly targetted for USB hard drives or 
something like this.


Best regards,
Christian Krause <chkr@plauener.de>
Ronald Wahl <rwahl@gmx.de>


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

* Re: cd-tray immediately closed after it has been opened
  2008-07-27 19:19 cd-tray immediately closed after it has been opened Christian Krause
@ 2008-07-27 23:35 ` David Zeuthen
  2008-07-28  8:48 ` Christian Krause
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: David Zeuthen @ 2008-07-27 23:35 UTC (permalink / raw)
  To: linux-hotplug

On Sun, 2008-07-27 at 21:19 +0200, Christian Krause wrote:
> Before this checkin, vol_id was only called for partitioned devices and 
> so the CD tray stayed open.

Probably vol_id needs to use O_NONBLOCK when opening sr devices. Does
that fix it?

    David



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

* Re: cd-tray immediately closed after it has been opened
  2008-07-27 19:19 cd-tray immediately closed after it has been opened Christian Krause
  2008-07-27 23:35 ` David Zeuthen
@ 2008-07-28  8:48 ` Christian Krause
  2008-07-28 16:23 ` David Zeuthen
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Christian Krause @ 2008-07-28  8:48 UTC (permalink / raw)
  To: linux-hotplug

David Zeuthen wrote:
> On Sun, 2008-07-27 at 21:19 +0200, Christian Krause wrote:
>   
>> Before this checkin, vol_id was only called for partitioned devices and 
>> so the CD tray stayed open.
>>     
>
> Probably vol_id needs to use O_NONBLOCK when opening sr devices. Does
> that fix it?
>   
Yes, indeed using a patch like this:

diff --git a/extras/volume_id/vol_id.c b/extras/volume_id/vol_id.c
index 5c4e05d..3dc9f95 100644
--- a/extras/volume_id/vol_id.c
+++ b/extras/volume_id/vol_id.c
@@ -224,7 +224,7 @@ int main(int argc, char *argv[])
                goto exit;
        }
 
-       fd = open(node, O_RDONLY);
+       fd = open(node, O_RDONLY | O_NONBLOCK);
        if (fd < 0) {
                fprintf(stderr, "%s: error opening volume\n", node);
                rc = 2;

fixes the problem, too. But it looks like that this is discouraged:

http://gitweb.freedesktop.org/?p=hal.git;a=commit;h-ab6d1b27a160895e99f3a7111a78aff68baff3

;-)


Best regards,
Christian

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

* Re: cd-tray immediately closed after it has been opened
  2008-07-27 19:19 cd-tray immediately closed after it has been opened Christian Krause
  2008-07-27 23:35 ` David Zeuthen
  2008-07-28  8:48 ` Christian Krause
@ 2008-07-28 16:23 ` David Zeuthen
  2008-07-30 17:27 ` Kay Sievers
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: David Zeuthen @ 2008-07-28 16:23 UTC (permalink / raw)
  To: linux-hotplug

On Mon, 2008-07-28 at 10:48 +0200, Christian Krause wrote:
> fixes the problem, too. But it looks like that this is discouraged:
> 
> http://gitweb.freedesktop.org/?p=hal.git;a=commit;h-ab6d1b27a160895e99f3a7111a78aff68baff3

I remember something funky about that; so we probably need to special
case vol_id to do something similar, e.g. first check for media and if
there is media make vol_id open it without O_NONBLOCK. And probably only
do the media check for optical drives.

     David



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

* Re: cd-tray immediately closed after it has been opened
  2008-07-27 19:19 cd-tray immediately closed after it has been opened Christian Krause
                   ` (2 preceding siblings ...)
  2008-07-28 16:23 ` David Zeuthen
@ 2008-07-30 17:27 ` Kay Sievers
  2008-07-31  7:31 ` Christian Krause
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Kay Sievers @ 2008-07-30 17:27 UTC (permalink / raw)
  To: linux-hotplug

On Mon, Jul 28, 2008 at 10:48, Christian Krause <chkr@plauener.de> wrote:
> David Zeuthen wrote:
>>
>> On Sun, 2008-07-27 at 21:19 +0200, Christian Krause wrote:
>>
>>>
>>> Before this checkin, vol_id was only called for partitioned devices and
>>> so the CD tray stayed open.
>>>
>>
>> Probably vol_id needs to use O_NONBLOCK when opening sr devices. Does
>> that fix it?
>>
>
> Yes, indeed using a patch like this:
>
> diff --git a/extras/volume_id/vol_id.c b/extras/volume_id/vol_id.c
> index 5c4e05d..3dc9f95 100644
> --- a/extras/volume_id/vol_id.c
> +++ b/extras/volume_id/vol_id.c
> @@ -224,7 +224,7 @@ int main(int argc, char *argv[])
>               goto exit;
>       }
>
> -       fd = open(node, O_RDONLY);
> +       fd = open(node, O_RDONLY | O_NONBLOCK);
>       if (fd < 0) {
>               fprintf(stderr, "%s: error opening volume\n", node);
>               rc = 2;
>
> fixes the problem, too. But it looks like that this is discouraged:
>
> http://gitweb.freedesktop.org/?p=hal.git;a=commit;h-ab6d1b27a160895e99f3a7111a78aff68baff3

Just to check if its the kernel that closes the tray on open(), can you set:
  /proc/sys/dev/cdrom/autoclose
to "0" and try again?

Thanks,
Kay

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

* Re: cd-tray immediately closed after it has been opened
  2008-07-27 19:19 cd-tray immediately closed after it has been opened Christian Krause
                   ` (3 preceding siblings ...)
  2008-07-30 17:27 ` Kay Sievers
@ 2008-07-31  7:31 ` Christian Krause
  2008-07-31  7:48 ` Kay Sievers
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Christian Krause @ 2008-07-31  7:31 UTC (permalink / raw)
  To: linux-hotplug

Hi Kay,

Kay Sievers wrote:
> On Mon, Jul 28, 2008 at 10:48, Christian Krause <chkr@plauener.de> wrote:
>   
>> David Zeuthen wrote:
>>     
>>> On Sun, 2008-07-27 at 21:19 +0200, Christian Krause wrote:
>>>
>>>       
>>>> Before this checkin, vol_id was only called for partitioned devices and
>>>> so the CD tray stayed open.
>>>>
>>>>         
>>> Probably vol_id needs to use O_NONBLOCK when opening sr devices. Does
>>> that fix it?
>>>
>>>       
>> Yes, indeed using a patch like this:
>>
>> diff --git a/extras/volume_id/vol_id.c b/extras/volume_id/vol_id.c
>> index 5c4e05d..3dc9f95 100644
>> --- a/extras/volume_id/vol_id.c
>> +++ b/extras/volume_id/vol_id.c
>> @@ -224,7 +224,7 @@ int main(int argc, char *argv[])
>>               goto exit;
>>       }
>>
>> -       fd = open(node, O_RDONLY);
>> +       fd = open(node, O_RDONLY | O_NONBLOCK);
>>       if (fd < 0) {
>>               fprintf(stderr, "%s: error opening volume\n", node);
>>               rc = 2;
>>
>> fixes the problem, too. But it looks like that this is discouraged:
>>
>> http://gitweb.freedesktop.org/?p=hal.git;a=commit;h-ab6d1b27a160895e99f3a7111a78aff68baff3
>>     
>
> Just to check if its the kernel that closes the tray on open(), can you set:
>   /proc/sys/dev/cdrom/autoclose
> to "0" and try again?
>   
I've tried it out with a small test program which just does an 
open("/dev/sr0", O_RDONLY)
and additionally with the complete udev/hal/... stack:

If autoclose = 0 then the tray is not closed otherwise it is (without 
O_NONBLOCK).
If O_NONBLOCK is used, the tray is not closed, even if autoclose = 0. So 
yes, it is the kernel which closes the tray.


Best regards,
Christian

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

* Re: cd-tray immediately closed after it has been opened
  2008-07-27 19:19 cd-tray immediately closed after it has been opened Christian Krause
                   ` (4 preceding siblings ...)
  2008-07-31  7:31 ` Christian Krause
@ 2008-07-31  7:48 ` Kay Sievers
  2008-08-01 19:23 ` David Zeuthen
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Kay Sievers @ 2008-07-31  7:48 UTC (permalink / raw)
  To: linux-hotplug

On Thu, Jul 31, 2008 at 09:31, Christian Krause <chkr@plauener.de> wrote:
> Kay Sievers wrote:
>>
>> On Mon, Jul 28, 2008 at 10:48, Christian Krause <chkr@plauener.de> wrote:
>>
>>>
>>> David Zeuthen wrote:
>>>
>>>>
>>>> On Sun, 2008-07-27 at 21:19 +0200, Christian Krause wrote:
>>>>
>>>>
>>>>>
>>>>> Before this checkin, vol_id was only called for partitioned devices and
>>>>> so the CD tray stayed open.
>>>>>
>>>>>
>>>>
>>>> Probably vol_id needs to use O_NONBLOCK when opening sr devices. Does
>>>> that fix it?
>>>>
>>>>
>>>
>>> Yes, indeed using a patch like this:
>>>
>>> diff --git a/extras/volume_id/vol_id.c b/extras/volume_id/vol_id.c
>>> index 5c4e05d..3dc9f95 100644
>>> --- a/extras/volume_id/vol_id.c
>>> +++ b/extras/volume_id/vol_id.c
>>> @@ -224,7 +224,7 @@ int main(int argc, char *argv[])
>>>              goto exit;
>>>      }
>>>
>>> -       fd = open(node, O_RDONLY);
>>> +       fd = open(node, O_RDONLY | O_NONBLOCK);
>>>      if (fd < 0) {
>>>              fprintf(stderr, "%s: error opening volume\n", node);
>>>              rc = 2;
>>>
>>> fixes the problem, too. But it looks like that this is discouraged:
>>>
>>>
>>> http://gitweb.freedesktop.org/?p=hal.git;a=commit;h-ab6d1b27a160895e99f3a7111a78aff68baff3
>>>
>>
>> Just to check if its the kernel that closes the tray on open(), can you
>> set:
>>  /proc/sys/dev/cdrom/autoclose
>> to "0" and try again?
>>
>
> I've tried it out with a small test program which just does an
> open("/dev/sr0", O_RDONLY)
> and additionally with the complete udev/hal/... stack:
>
> If autoclose = 0 then the tray is not closed otherwise it is (without
> O_NONBLOCK).
> If O_NONBLOCK is used, the tray is not closed, even if autoclose = 0. So
> yes, it is the kernel which closes the tray.

Ah, great, thanks for the test. We might just be able to skip optical
drives if cdrom_id did not find a valid media. Does adding this rule
(ID_CDROM_MEDIA_TRACK_COUNT) fix the unwanted tray closing?

Thanks,
Kay

--- a/rules/rules.d/60-persistent-storage.rules
+++ b/rules/rules.d/60-persistent-storage.rules
@@ -52,6 +52,8

 # skip unpartitioned removable media devices from drivers which do
not send "change" events
 ENV{DEVTYPE}="disk", KERNEL!="sd*|sr*", ATTR{removable}="1",
GOTO="persistent_storage_end"
+# skip optical drives without media
+ENV{DEVTYPE}="disk", KERNEL="sr*",
ENV{ID_CDROM_MEDIA_TRACK_COUNT}!="?*", GOTO="persistent_storage_end"

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

* Re: cd-tray immediately closed after it has been opened
  2008-07-27 19:19 cd-tray immediately closed after it has been opened Christian Krause
                   ` (5 preceding siblings ...)
  2008-07-31  7:48 ` Kay Sievers
@ 2008-08-01 19:23 ` David Zeuthen
  2008-08-03 17:38 ` Christian Krause
  2008-08-04  6:52 ` Kay Sievers
  8 siblings, 0 replies; 10+ messages in thread
From: David Zeuthen @ 2008-08-01 19:23 UTC (permalink / raw)
  To: linux-hotplug

On Thu, 2008-07-31 at 09:48 +0200, Kay Sievers wrote:
> Ah, great, thanks for the test. We might just be able to skip optical
> drives if cdrom_id did not find a valid media. Does adding this rule
> (ID_CDROM_MEDIA_TRACK_COUNT) fix the unwanted tray closing?

Your patch fixes the problem for me. Thanks!

     David



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

* Re: cd-tray immediately closed after it has been opened
  2008-07-27 19:19 cd-tray immediately closed after it has been opened Christian Krause
                   ` (6 preceding siblings ...)
  2008-08-01 19:23 ` David Zeuthen
@ 2008-08-03 17:38 ` Christian Krause
  2008-08-04  6:52 ` Kay Sievers
  8 siblings, 0 replies; 10+ messages in thread
From: Christian Krause @ 2008-08-03 17:38 UTC (permalink / raw)
  To: linux-hotplug

Hi Kay,

Kay Sievers wrote:
> Ah, great, thanks for the test. We might just be able to skip optical
> drives if cdrom_id did not find a valid media. Does adding this rule
> (ID_CDROM_MEDIA_TRACK_COUNT) fix the unwanted tray closing?
>
> Thanks,
> Kay
>
> --- a/rules/rules.d/60-persistent-storage.rules
> +++ b/rules/rules.d/60-persistent-storage.rules
> @@ -52,6 +52,8
>
>  # skip unpartitioned removable media devices from drivers which do
> not send "change" events
>  ENV{DEVTYPE}="disk", KERNEL!="sd*|sr*", ATTR{removable}="1",
> GOTO="persistent_storage_end"
> +# skip optical drives without media
> +ENV{DEVTYPE}="disk", KERNEL="sr*",
> ENV{ID_CDROM_MEDIA_TRACK_COUNT}!="?*", GOTO="persistent_storage_end"
>
>   

Sorry for the late answer. I've tried out the patch and it solves the 
problem for me. Thanks!


Best regards,
Christian

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

* Re: cd-tray immediately closed after it has been opened
  2008-07-27 19:19 cd-tray immediately closed after it has been opened Christian Krause
                   ` (7 preceding siblings ...)
  2008-08-03 17:38 ` Christian Krause
@ 2008-08-04  6:52 ` Kay Sievers
  8 siblings, 0 replies; 10+ messages in thread
From: Kay Sievers @ 2008-08-04  6:52 UTC (permalink / raw)
  To: linux-hotplug

On Sun, Aug 3, 2008 at 19:38, Christian Krause <chkr@plauener.de> wrote:
> Kay Sievers wrote:
>>
>> Ah, great, thanks for the test. We might just be able to skip optical
>> drives if cdrom_id did not find a valid media. Does adding this rule
>> (ID_CDROM_MEDIA_TRACK_COUNT) fix the unwanted tray closing?
>>
>> Thanks,
>> Kay
>>
>> --- a/rules/rules.d/60-persistent-storage.rules
>> +++ b/rules/rules.d/60-persistent-storage.rules
>> @@ -52,6 +52,8
>>
>>  # skip unpartitioned removable media devices from drivers which do
>> not send "change" events
>>  ENV{DEVTYPE}="disk", KERNEL!="sd*|sr*", ATTR{removable}="1",
>> GOTO="persistent_storage_end"
>> +# skip optical drives without media
>> +ENV{DEVTYPE}="disk", KERNEL="sr*",
>> ENV{ID_CDROM_MEDIA_TRACK_COUNT}!="?*", GOTO="persistent_storage_end"
>>
>
> Sorry for the late answer. I've tried out the patch and it solves the
> problem for me. Thanks!

It's part of udev 126. Thanks a lot for your help.

Kay

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

end of thread, other threads:[~2008-08-04  6:52 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-27 19:19 cd-tray immediately closed after it has been opened Christian Krause
2008-07-27 23:35 ` David Zeuthen
2008-07-28  8:48 ` Christian Krause
2008-07-28 16:23 ` David Zeuthen
2008-07-30 17:27 ` Kay Sievers
2008-07-31  7:31 ` Christian Krause
2008-07-31  7:48 ` Kay Sievers
2008-08-01 19:23 ` David Zeuthen
2008-08-03 17:38 ` Christian Krause
2008-08-04  6:52 ` Kay Sievers

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