On 11/26/19 1:21 PM, Michal Suchánek wrote: > On Tue, Nov 26, 2019 at 01:01:42PM -0700, Jens Axboe wrote: >> On 11/26/19 12:54 PM, Michal Suchanek wrote: >>> Hello, >>> >>> there is cdrom autoclose feature that is supposed to close the tray, >>> wait for the disc to become ready, and then open the device. >>> >>> This used to work in ancient times. Then in old times there was a hack >>> in util-linux which worked around the breakage which probably resulted >>> from switching to scsi emulation. >>> >>> Currently util-linux maintainer refuses to merge another hack on the >>> basis that kernel still has the feature so it should be fixed there. >>> The code needs not be replicated in every userspace utility like mount >>> or dd which has no business knowing which devices are CD-roms and where >>> the autoclose setting is in the kernel. >>> >>> This is rebase on top of current master. >>> >>> Also it seems that most people think that this is fix for WMware because >>> there is one patch dealing with WMware. >> >> I think the main complaint with this is that it's kind of a stretch to >> add core functionality for a device type that's barely being >> manufactured anymore and is mostly used in a virtualized fashion. I >> think it you could fix this without 10 patches of churn and without >> adding a new ->open() addition to fops, then people would be a lot more >> receptive to the idea of improving cdrom auto-close. > > I see no way to do that cleanly. > > There are two open modes for cdrom devices - blocking and > non-blocking. > > In blocking mode open() should analyze the medium so that it's ready > when it returns. In non-blocking mode it should return immediately so > long as you can talk to the device. > > When waiting in open() with locks held the processes trying to open > the device are locked out regradless of the mode they use. > > The only way to solve this is to pretend that the device is open and > do the wait afterwards with the device unlocked. How is this any different from an open on a file that needs to bring in meta data on a busy rotating device, which can also take seconds? -- Jens Axboe