diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-03-12 12:40:58 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2022-03-24 16:20:08 +0100 |
commit | ef400c3878ad23aa02bd5bb47f089bdef49e9d8c (patch) | |
tree | 9eaad187844cb3ec2bdd3797110dac44f10b4e43 /src/udev | |
parent | errno-util: add ERRNO_IS_DEVICE_ABSENT() macro (diff) | |
download | systemd-ef400c3878ad23aa02bd5bb47f089bdef49e9d8c.tar.xz systemd-ef400c3878ad23aa02bd5bb47f089bdef49e9d8c.zip |
udev: only ignore ENOENT or friends which suggest the block device is not exist
The ENOENT, ENXIO, and ENODEV error can happen easily when a block
device appears and soon removed. So, it is reasonable to ignore the
error. But other errors should not occur here, and hence let's handle
them as critical.
Diffstat (limited to 'src/udev')
-rw-r--r-- | src/udev/udevd.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/udev/udevd.c b/src/udev/udevd.c index 8389c39f65..f1f864a461 100644 --- a/src/udev/udevd.c +++ b/src/udev/udevd.c @@ -399,8 +399,10 @@ static int worker_lock_block_device(sd_device *dev, int *ret_fd) { fd = open(val, O_RDONLY|O_CLOEXEC|O_NOFOLLOW|O_NONBLOCK); if (fd < 0) { - log_device_debug_errno(dev, errno, "Failed to open '%s', ignoring: %m", val); - return 0; + bool ignore = ERRNO_IS_DEVICE_ABSENT(errno); + + log_device_debug_errno(dev, errno, "Failed to open '%s'%s: %m", val, ignore ? ", ignoring" : ""); + return ignore ? 0 : -errno; } if (flock(fd, LOCK_SH|LOCK_NB) < 0) |