summaryrefslogtreecommitdiff
path: root/src/libsystemd
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-09-09 20:52:41 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-09-09 21:16:37 +0900
commit89ad604839f9185af2e78da0e411c2f9b6d92953 (patch)
tree9dafeeeb3b99c93224670e3035e912e886265a25 /src/libsystemd
parent0f519b9c2e3ae67e93acc3c2fcfd2945375b69db (diff)
downloadsystemd-89ad604839f9185af2e78da0e411c2f9b6d92953.tar.gz
sd-device-enumerator: always ignore ENOENT from opendir()
But logs all errors.
Diffstat (limited to 'src/libsystemd')
-rw-r--r--src/libsystemd/sd-device/device-enumerator.c38
1 files changed, 28 insertions, 10 deletions
diff --git a/src/libsystemd/sd-device/device-enumerator.c b/src/libsystemd/sd-device/device-enumerator.c
index 3c57cc2f8d..5afe9f348f 100644
--- a/src/libsystemd/sd-device/device-enumerator.c
+++ b/src/libsystemd/sd-device/device-enumerator.c
@@ -688,9 +688,15 @@ static int enumerator_scan_dir_and_add_devices(
path = strjoina(path, subdir2, "/");
dir = opendir(path);
- if (!dir)
+ if (!dir) {
+ bool ignore = errno == ENOENT;
+
/* this is necessarily racey, so ignore missing directories */
- return (errno == ENOENT && (subdir1 || subdir2)) ? 0 : -errno;
+ log_debug_errno(errno,
+ "sd-device-enumerator: Failed to open directory %s%s: %m",
+ path, ignore ? ", ignoring" : "");
+ return ignore ? 0 : -errno;
+ }
FOREACH_DIRENT_ALL(de, dir, return -errno) {
_cleanup_(sd_device_unrefp) sd_device *device = NULL;
@@ -748,8 +754,14 @@ static int enumerator_scan_dir(
path = strjoina("/sys/", basedir);
dir = opendir(path);
- if (!dir)
- return -errno;
+ if (!dir) {
+ bool ignore = errno == ENOENT;
+
+ log_debug_errno(errno,
+ "sd-device-enumerator: Failed to open directory %s%s: %m",
+ path, ignore ? ", ignoring" : "");
+ return ignore ? 0 : -errno;
+ }
FOREACH_DIRENT_ALL(de, dir, return -errno) {
int k;
@@ -780,9 +792,12 @@ static int enumerator_scan_devices_tag(sd_device_enumerator *enumerator, const c
dir = opendir(path);
if (!dir) {
- if (errno != ENOENT)
- return log_debug_errno(errno, "sd-device-enumerator: Failed to open tags directory %s: %m", path);
- return 0;
+ bool ignore = errno == ENOENT;
+
+ log_debug_errno(errno,
+ "sd-device-enumerator: Failed to open directory %s%s: %m",
+ path, ignore ? ", ignoring" : "");
+ return ignore ? 0 : -errno;
}
/* TODO: filter away subsystems? */
@@ -865,9 +880,12 @@ static int parent_crawl_children(sd_device_enumerator *enumerator, const char *p
dir = opendir(path);
if (!dir) {
- if (errno == ENOENT)
- return 0;
- return log_debug_errno(errno, "sd-device-enumerator: Failed to open %s: %m", path);
+ bool ignore = errno == ENOENT;
+
+ log_debug_errno(errno,
+ "sd-device-enumerator: Failed to open directory %s%s: %m",
+ path, ignore ? ", ignoring" : "");
+ return ignore ? 0 : -errno;
}
FOREACH_DIRENT_ALL(de, dir, return -errno) {