[systemd-devel] [PATCH v4] watchdog: Don't require WDIOC_SETOPTIONS/WDIOS_ENABLECARD
Lennart Poettering
lennart at poettering.net
Wed Jun 17 10:04:34 PDT 2015
On Wed, 17.06.15 18:57, Jean Delvare (jdelvare at suse.de) wrote:
> 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.
Thanks! Applied!
> ---
> Changes since v3:
> * Return negative error number.
>
> Changes since v2:
> * Fix indentation (spaces not tabs.)
>
> Changes since v1:
> * Log WDIOC_SETOPTIONS/WDIOS_ENABLECARD failure at debug level if
> ENOTTY is returned. Suggested by Lennart Poettering.
>
> src/shared/watchdog.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> --- systemd.orig/src/shared/watchdog.c 2015-06-17 18:11:23.056059315 +0200
> +++ systemd/src/shared/watchdog.c 2015-06-17 18:51:16.980269395 +0200
> @@ -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)
>
>
> --
> Jean Delvare
> SUSE L3 Support
>
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list