summaryrefslogtreecommitdiffstats
path: root/src/udev
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-03-12 12:40:58 +0100
committerLennart Poettering <lennart@poettering.net>2022-03-24 16:20:08 +0100
commitef400c3878ad23aa02bd5bb47f089bdef49e9d8c (patch)
tree9eaad187844cb3ec2bdd3797110dac44f10b4e43 /src/udev
parenterrno-util: add ERRNO_IS_DEVICE_ABSENT() macro (diff)
downloadsystemd-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.c6
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)