summaryrefslogtreecommitdiff
path: root/src/shared/watchdog.c
diff options
context:
space:
mode:
authorJean Delvare <jdelvare@suse.de>2015-06-17 18:57:39 +0200
committerLennart Poettering <lennart@poettering.net>2015-06-17 19:04:10 +0200
commit14f494c710bec8fcbadb5f46a9c25b9ebf367f19 (patch)
tree5f39ad8423cb2c994214b2d6c2816a95843fc593 /src/shared/watchdog.c
parent99cfda2f7fa540866172358db2ff059b57c3b3ea (diff)
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.
Diffstat (limited to 'src/shared/watchdog.c')
-rw-r--r--src/shared/watchdog.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/shared/watchdog.c b/src/shared/watchdog.c
index 2fe4eb81cf..9d39beb340 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)