On Thu, Jul 31, 2008 at 09:31, Christian Krause <chkr@xxxxxxxxxxx> wrote: > Kay Sievers wrote: >> >> On Mon, Jul 28, 2008 at 10:48, Christian Krause <chkr@xxxxxxxxxxx> 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=2dab6d1b27a160895e99f3a7111a78aff68baff3 >>> >> >> 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" -- To unsubscribe from this list: send the line "unsubscribe linux-hotplug" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html