diff options
author | Lennart Poettering <lennart@poettering.net> | 2021-02-25 15:04:25 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2021-02-26 14:27:49 +0100 |
commit | 97e535c7248cc0457395e2d62b6e7d6c342a0bd2 (patch) | |
tree | 082b37eb4b763fdcc8538074972dfb094e84b727 /src/udev/udev-builtin-btrfs.c | |
parent | Merge pull request #18804 from poettering/epoll-wait2 (diff) | |
download | systemd-97e535c7248cc0457395e2d62b6e7d6c342a0bd2.tar.xz systemd-97e535c7248cc0457395e2d62b6e7d6c342a0bd2.zip |
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.
Diffstat (limited to 'src/udev/udev-builtin-btrfs.c')
-rw-r--r-- | src/udev/udev-builtin-btrfs.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/udev/udev-builtin-btrfs.c b/src/udev/udev-builtin-btrfs.c index 9079d1b8e9..436bf6bd44 100644 --- a/src/udev/udev-builtin-btrfs.c +++ b/src/udev/udev-builtin-btrfs.c @@ -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); |