When the nowayout option is used with a watchdog device, busybox'
current behaviour of always doing a open/write magic char/close
sequence before the "real" open causes warning messages in the kernel
log:

[   16.212184] watchdog: watchdog0: nowayout prevents watchdog being stopped!
[   16.212196] watchdog: watchdog0: watchdog did not stop!

The latter may also appear by itself in case the watchdog is of the
type that cannot be stopped once started.

These warnings can be somewhat ominous and distracting, so allow
configuring whether to use this open-write-close-open sequence rather
than just open. Also saves a bit of .text when disabled:

function                                             old     new   delta
shutdown_on_signal                                    31      58     +27
watchdog_main                                        339     306     -33
shutdown_watchdog                                     34       -     -34
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/1 up/down: 27/-67)            Total: -40 bytes

Signed-off-by: Rasmus Villemoes <[email protected]>
---
 miscutils/watchdog.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/miscutils/watchdog.c b/miscutils/watchdog.c
index 0ed10bcf1..2a8ff2de6 100644
--- a/miscutils/watchdog.c
+++ b/miscutils/watchdog.c
@@ -18,6 +18,17 @@
 //config:      watchdog applet ever fails to write the magic character within a
 //config:      certain amount of time, the watchdog device assumes the system 
has
 //config:      hung, and will cause the hardware to reboot.
+//config:
+//config:config FEATURE_WATCHDOG_OPEN_TWICE
+//config:      bool "Open watchdog device twice, closing it gracefully in 
between"
+//config:      depends on WATCHDOG
+//config:      default y
+//config:      help
+//config:      When enabled, the watchdog device is opened and then immediately
+//config:      magic-closed, before being opened a second time. This may be 
necessary
+//config:      for some watchdog devices, but can cause spurious warnings in 
the
+//config:      kernel log if the nowayout feature is enabled. Say n if you know
+//config:      you don't need this and want to avoid those spurious warnings.
 
 //applet:IF_WATCHDOG(APPLET(watchdog, BB_DIR_SBIN, BB_SUID_DROP))
 
@@ -73,6 +84,7 @@ static void watchdog_open(const char* device)
        /* Use known fd # - avoid needing global 'int fd' */
        xmove_fd(xopen(device, O_WRONLY), 3);
 
+#if ENABLE_FEATURE_WATCHDOG_OPEN_TWICE
        /* If the watchdog driver can do something other than cause a reboot
         * on a timeout, then it's possible this program may be starting from
         * a state when the watchdog hadn't been previously stopped with
@@ -82,6 +94,7 @@ static void watchdog_open(const char* device)
        shutdown_watchdog();
 
        xmove_fd(xopen(device, O_WRONLY), 3);
+#endif
 }
 
 int watchdog_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-- 
2.29.2

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to