1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-19 22:50:17 +03:00

udev: when btrfs.ko is not available consider btrfs filesystems not ready

Let's add a special tweak to the btrfs builtin: if /dev/btrfs-control is
not there, let's consider all btrfs file systems as SYSTEMD_READY=0.
This is useful in initrds, where btrfs.ko might be missing. After the
initrd → host transition we can then retigger the device and undo the
SYSTEMD_READY=0 marking.
This commit is contained in:
Lennart Poettering 2021-02-25 15:04:25 +01:00
parent 16e6a7010f
commit 97e535c724

View File

@ -21,8 +21,17 @@ static int builtin_btrfs(sd_device *dev, int argc, char *argv[], bool test) {
return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL), "Invalid arguments");
fd = open("/dev/btrfs-control", O_RDWR|O_CLOEXEC);
if (fd < 0)
if (fd < 0) {
if (IN_SET(errno, ENOENT, ENXIO, ENODEV)) {
/* Driver not installed? Then we aren't ready. This is useful in initrds that lack
* btrfs.ko. After the host transition (where btrfs.ko will hopefully become
* available) the device can be retriggered and will then be considered ready. */
udev_builtin_add_property(dev, test, "ID_BTRFS_READY", "0");
return 0;
}
return log_device_debug_errno(dev, errno, "Failed to open /dev/btrfs-control: %m");
}
strscpy(args.name, sizeof(args.name), argv[2]);
r = ioctl(fd, BTRFS_IOC_DEVICES_READY, &args);