[systemd-devel] [survey] BTRFS_IOC_DEVICES_READY return status

Lennart Poettering lennart at poettering.net
Mon Jun 15 03:41:22 PDT 2015

On Sat, 13.06.15 17:35, Anand Jain (anand.jain at oracle.com) wrote:

> >>Are there any other users?
> >>
> >>>   - If the the device in the argument is already mounted,
> >>>     can it straightaway return 0 (ready) ? (as of now it would
> >>>     again independently read the SB determine total_devices
> >>>     and check against num_devices.
> >>>
> >>
> >>I think yes; obvious use case is btrfs mounted in initrd and later
> >>coldplug. There is no point to wait for anything as filesystem is
> >>obviously there.
> >>
>  There is little difference. If the device is already mounted.
>  And there are two device paths for the same device PA and PB.
>  The path as last given to either 'btrfs dev scan (BTRFS_IOC_SCAN_DEV)'
>  or 'btrfs device ready (BTRFS_IOC_DEVICES_READY)' will be shown
>  in the 'btrfs filesystem show' or '/proc/self/mounts' output.
>  It does not mean that btrfs kernel will close the first device path
>  and reopen the 2nd given device path, it just updates the device path
>  in the kernel.

The device paths shown in /proc/self/mountinfo is also weird in other
cases: if people boot up without initrd, and use a btrfs fs as root,
then it will always carry the string /dev/root in there, which is
completely useless, since such a device never exists in userspace or
/sys, and hence one cannot make sense of. Moreover, if one then asks
the kernel for the devices backing the btrfs fs via the ioctl it will
also return /dev/root for it, which is really useless.

I think in general I'd prefer if btrfs would stop returning the device
paths it got from userspace or the kernel, and would always return
sanitized ones that use the official kernel names for the devices in
them. Specifically, the member devices ioctl should always return
names like "/dev/sda5", even if I mount something using root= on the
kernel cmdline, or if I mount /dev/disks/by-uuid/.... via a symlink
instead of the real kernel name of the device.

Then, I think it would be a good idea to always update the device
string shown in /proc/self/mountinfo to be a concatenated version of
the list of device names reported by the ioctl. So that a btrfs RAID
would show "/dev/sda5:/dev/sdb6:/dev/sdc5" or so. And if I remove or
add backing devices the string really should be updated.

The btrfs client side tools then could use udev to get a list of the
device node symlinks for each device to help the user identifying
which backing devices belong to a btrfs pool.


Lennart Poettering, Red Hat

More information about the systemd-devel mailing list