From: Jean Delvare Date: Wed, 17 Jun 2015 16:57:39 +0000 (+0200) Subject: watchdog: Don't require WDIOC_SETOPTIONS/WDIOS_ENABLECARD X-Git-Tag: v221~46 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=14f494c710bec8fcbadb5f46a9c25b9ebf367f19;p=thirdparty%2Fsystemd.git watchdog: Don't require WDIOC_SETOPTIONS/WDIOS_ENABLECARD Not all watchdog drivers implement WDIOC_SETOPTIONS. Drivers which do not implement it have their device always enabled. So it's fine to report an error if WDIOS_DISABLECARD is passed and the ioctl is not implemented, however failing when WDIOS_ENABLECARD is passed and the ioctl is not implemented is not good: if the device was already enabled then WDIOS_ENABLECARD was a no-op and wasn't needed in the first place. So we can just ignore the error and continue. --- diff --git a/src/shared/watchdog.c b/src/shared/watchdog.c index 2fe4eb81cfb..9d39beb3404 100644 --- a/src/shared/watchdog.c +++ b/src/shared/watchdog.c @@ -60,8 +60,13 @@ static int update_timeout(void) { flags = WDIOS_ENABLECARD; r = ioctl(watchdog_fd, WDIOC_SETOPTIONS, &flags); - if (r < 0) - return log_warning_errno(errno, "Failed to enable hardware watchdog: %m"); + if (r < 0) { + /* ENOTTY means the watchdog is always enabled so we're fine */ + log_full(errno == ENOTTY ? LOG_DEBUG : LOG_WARNING, + "Failed to enable hardware watchdog: %m"); + if (errno != ENOTTY) + return -errno; + } r = ioctl(watchdog_fd, WDIOC_KEEPALIVE, 0); if (r < 0)