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:
parent
16e6a7010f
commit
97e535c724
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user