shared/watchdog: raise log levels for watchdog errors
If we failed to open the watchdog device for any reason, we'd only log at debug level. This seems iffy: if the user configured a timeout for the watchdog, we should report when we can't set it up. ENOENT is still logged at debug level only, since it's somewhat expected to have a watchdog timeout set up, even for systems which don't have a watchdog, or the device might appear later. If the device doesn't support WDIOC_GETSUPPORT, still log that we opened a device. No change in behaviour, except for the log level threshold. As a side effect, the reason why we failed to open the device is now stored in watchdog_fd (previously it was -1 always), but this isn't used for anything.
This commit is contained in:
+19
-11
@@ -195,10 +195,13 @@ usec_t watchdog_get_last_ping(clockid_t clock) {
|
||||
}
|
||||
|
||||
static int watchdog_ping_now(void) {
|
||||
int r;
|
||||
|
||||
assert(watchdog_fd >= 0);
|
||||
|
||||
if (ioctl(watchdog_fd, WDIOC_KEEPALIVE, 0) < 0)
|
||||
return log_warning_errno(errno, "Failed to ping hardware watchdog, ignoring: %m");
|
||||
r = RET_NERRNO(ioctl(watchdog_fd, WDIOC_KEEPALIVE, 0));
|
||||
if (r < 0)
|
||||
return log_warning_errno(r, "Failed to ping hardware watchdog, ignoring: %m");
|
||||
|
||||
watchdog_last_ping = now(CLOCK_BOOTTIME);
|
||||
|
||||
@@ -322,7 +325,7 @@ static int watchdog_open(void) {
|
||||
STRV_MAKE("/dev/watchdog0", "/dev/watchdog") : STRV_MAKE(watchdog_device);
|
||||
|
||||
STRV_FOREACH(wd, try_order) {
|
||||
watchdog_fd = open(*wd, O_WRONLY|O_CLOEXEC);
|
||||
watchdog_fd = RET_NERRNO(open(*wd, O_WRONLY|O_CLOEXEC));
|
||||
if (watchdog_fd >= 0) {
|
||||
if (free_and_strdup(&watchdog_device, *wd) < 0) {
|
||||
r = log_oom_debug();
|
||||
@@ -332,22 +335,27 @@ static int watchdog_open(void) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (errno != ENOENT)
|
||||
return log_debug_errno(errno, "Failed to open watchdog device %s: %m", *wd);
|
||||
if (watchdog_fd != -ENOENT)
|
||||
return log_warning_errno(watchdog_fd, "Failed to open watchdog device %s: %m", *wd);
|
||||
}
|
||||
|
||||
if (watchdog_fd < 0)
|
||||
return log_debug_errno(SYNTHETIC_ERRNO(ENOENT), "Failed to open watchdog device %s.", watchdog_device ?: "auto");
|
||||
return log_debug_errno(watchdog_fd, "Failed to open %swatchdog device%s%s.",
|
||||
watchdog_device ? "" : "any ",
|
||||
watchdog_device ? " " : "",
|
||||
strempty(watchdog_device));
|
||||
|
||||
watchdog_last_ping = USEC_INFINITY;
|
||||
|
||||
if (ioctl(watchdog_fd, WDIOC_GETSUPPORT, &ident) < 0)
|
||||
log_debug_errno(errno, "Hardware watchdog %s does not support WDIOC_GETSUPPORT ioctl, ignoring: %m", watchdog_device);
|
||||
r = RET_NERRNO(ioctl(watchdog_fd, WDIOC_GETSUPPORT, &ident));
|
||||
if (r < 0)
|
||||
log_info_errno(r, "Using hardware watchdog %s, no support for WDIOC_GETSUPPORT ioctl: %m",
|
||||
watchdog_device);
|
||||
else
|
||||
log_info("Using hardware watchdog '%s', version %x, device %s",
|
||||
log_info("Using hardware watchdog %s: '%s', version %x.",
|
||||
watchdog_device,
|
||||
ident.identity,
|
||||
ident.firmware_version,
|
||||
watchdog_device);
|
||||
ident.firmware_version),
|
||||
|
||||
r = watchdog_update_timeout();
|
||||
if (r < 0)
|
||||
|
||||
Reference in New Issue
Block a user