From: Zbigniew Jędrzejewski-Szmek Date: Wed, 5 Jun 2019 07:54:54 +0000 (+0200) Subject: udevadm trigger: log errors and return first failure X-Git-Tag: v243-rc1~308^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=97afc0351a96e0daa83964df33937967c75c644f;p=thirdparty%2Fsystemd.git udevadm trigger: log errors and return first failure When udevadm trigger is called, the list of devices to trigger is always generated through enumeration, and devices can come and go, so we should not treat -ENOENT as a failure. But other types of failure should be logged. It seems they were logged until baa30fbc2c04b23209d0b8fb3c86cd15ef9ea81a. Also, return the first error. (I'm not sure if there are other failure modes which we want to ignore. If they are, they'll need to be whitelisted like -ENOENT.). --- diff --git a/src/udev/udevadm-trigger.c b/src/udev/udevadm-trigger.c index 144b464d24f..f14010a2d0d 100644 --- a/src/udev/udevadm-trigger.c +++ b/src/udev/udevadm-trigger.c @@ -25,7 +25,7 @@ static bool arg_dry_run = false; static int exec_list(sd_device_enumerator *e, const char *action, Set *settle_set) { sd_device *d; - int r; + int r, ret = 0; FOREACH_DEVICE_AND_SUBSYSTEM(e, d) { _cleanup_free_ char *filename = NULL; @@ -45,7 +45,10 @@ static int exec_list(sd_device_enumerator *e, const char *action, Set *settle_se r = write_string_file(filename, action, WRITE_STRING_FILE_DISABLE_BUFFER); if (r < 0) { - log_debug_errno(r, "Failed to write '%s' to '%s', ignoring: %m", action, filename); + log_full_errno(r == -ENOENT ? LOG_DEBUG : LOG_ERR, r, + "Failed to write '%s' to '%s': %m", action, filename); + if (ret == 0 && r != -ENOENT) + ret = r; continue; } @@ -56,7 +59,7 @@ static int exec_list(sd_device_enumerator *e, const char *action, Set *settle_se } } - return 0; + return ret; } static int device_monitor_handler(sd_device_monitor *m, sd_device *dev, void *userdata) {