diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-09-09 20:52:41 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-09-09 21:16:37 +0900 |
commit | 89ad604839f9185af2e78da0e411c2f9b6d92953 (patch) | |
tree | 9dafeeeb3b99c93224670e3035e912e886265a25 /src | |
parent | 0f519b9c2e3ae67e93acc3c2fcfd2945375b69db (diff) | |
download | systemd-89ad604839f9185af2e78da0e411c2f9b6d92953.tar.gz |
sd-device-enumerator: always ignore ENOENT from opendir()
But logs all errors.
Diffstat (limited to 'src')
-rw-r--r-- | src/libsystemd/sd-device/device-enumerator.c | 38 |
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) { |