Re: [PATCH] blkid: open device in nonblock mode.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Nov 05, 2019 at 12:41:22PM +0100, Karel Zak wrote:
> On Mon, Nov 04, 2019 at 09:23:15PM +0100, Michal Suchanek wrote:
> > When autoclose is set (kernel default but many distributions reverse the
> > setting) opening a CD-rom device causes the tray to close.
> > 
> > The function of blkid is to report the current state of the device and
> > not to change it. Hence it should use O_NONBLOCK when opening the
> > device to avoid closing a CD-rom tray.
> 
> I can imagine this as optional solution (command line option), but I

That defeats the purpose of this change. You cannot use the option with
old blkid, so using the option is broken and not using it is also broken.

> have doubts to use O_NONBLOCK by default for all block devices. I have
> no example, but it sounds like a way how to introduce regressions in
> libblkid behavior. (Any kernel guy around?) Is it really only cdrom
> driver(s) where O_NONBLOCK has any impact? What about USB, some random
> SCSI, ... I don't know.
> 
> The another problem is that the library does not have to open the device,
> you can use already open file descriptor (blkid_probe_set_device()). 
> So, in many cases the patch will have no effect.

If some random program using libblkid closes the tray I don't care that
much. However, many system scripts use blkid, probably to find a device
with particular ID:

/usr/bin/dracut:            dev=$(blkid -l -t UUID=${dev#UUID=} -o
device)
/usr/bin/dracut:            dev=$(blkid -l -t LABEL=${dev#LABEL=} -o
device)
/usr/bin/dracut:            dev=$(blkid -l -t PARTUUID=${dev#PARTUUID=}
-o device)
/usr/bin/dracut:            dev=$(blkid -l -t
PARTLABEL=${dev#PARTLABEL=} -o device)

/usr/bin/linux-boot-prober:	partition=$(blkid | grep "$UUID" | cut
-d ':' -f 1 | tr '\n' ' ' | cut -d ' ' -f 1)
/usr/bin/os-prober:	blkid | grep btrfs | cut -d ':' -f 1
/usr/bin/os-prober:	type=$(blkid -o value -s TYPE $mapped || true)
/usr/bin/os-prober:		uuid=$(blkid -o value -s UUID $mapped)

> 
> > blkid is used liberally in scripts so it can potentially interfere with
> > the user operating the CD-rom hardware.
> 
> It's better to use lsblk in script, it reads info from udev -- call
> blindly blkid(8) is usually overkill.

First off you need to explain it to all authors of all random scripts
out there.

Secondly udev is not guaranteed to exist/run on every system.

Thanks

Michal



[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux