From: Franck Bui Date: Mon, 6 Sep 2021 06:26:30 +0000 (+0200) Subject: core: call watchdog_ping() unconditionally X-Git-Tag: v250-rc1~670^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ae4a0ec45c97024387f150305ada14c9117116f4;p=thirdparty%2Fsystemd.git core: call watchdog_ping() unconditionally This basically reverts commit 61927b9f116bf45bfdbf19dc2981d4a4f527ae5f and relies on the fact that watchdog_ping() will open and setup the watchdog for us in case the device appears later on. Also unlike what is said in comment https://github.com/systemd/systemd/pull/17460#pullrequestreview-517434377, both m->watchdog[] and m->overriden_watchdog[] are not supposed to store the actual timeout used by the watchdog device but stores the value defined by the user. If the HW timeout value is really needed by the manager then it's probably better to read it via an helper defined in watchdog.c instead. However the HW timeout value is currently only needed by the watchdog code itself mainly when it calculates the time for the next ping. --- diff --git a/src/core/manager.c b/src/core/manager.c index 7d3602c71cd..2b8270f1465 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -2978,13 +2978,8 @@ int manager_loop(Manager *m) { return log_error_errno(r, "Failed to enable SIGCHLD event source: %m"); while (m->objective == MANAGER_OK) { - usec_t watchdog_usec; - watchdog_usec = manager_get_watchdog(m, WATCHDOG_RUNTIME); - if (m->runtime_watchdog_running) - (void) watchdog_ping(); - else if (timestamp_is_set(watchdog_usec)) - manager_retry_runtime_watchdog(m); + (void) watchdog_ping(); if (!ratelimit_below(&rl)) { /* Yay, something is going seriously wrong, pause a little */ @@ -3198,7 +3193,6 @@ usec_t manager_get_watchdog(Manager *m, WatchdogType t) { } void manager_set_watchdog(Manager *m, WatchdogType t, usec_t timeout) { - int r = 0; assert(m); @@ -3210,22 +3204,16 @@ void manager_set_watchdog(Manager *m, WatchdogType t, usec_t timeout) { if (t == WATCHDOG_RUNTIME) if (!timestamp_is_set(m->watchdog_overridden[WATCHDOG_RUNTIME])) { - if (timestamp_is_set(timeout)) { - r = watchdog_set_timeout(&timeout); - - if (r >= 0) - m->runtime_watchdog_running = true; - } else { + if (timestamp_is_set(timeout)) + (void) watchdog_set_timeout(&timeout); + else watchdog_close(true); - m->runtime_watchdog_running = false; - } } m->watchdog[t] = timeout; } int manager_override_watchdog(Manager *m, WatchdogType t, usec_t timeout) { - int r = 0; assert(m); @@ -3239,36 +3227,16 @@ int manager_override_watchdog(Manager *m, WatchdogType t, usec_t timeout) { usec_t *p; p = timestamp_is_set(timeout) ? &timeout : &m->watchdog[t]; - if (timestamp_is_set(*p)) { - r = watchdog_set_timeout(p); - - if (r >= 0) - m->runtime_watchdog_running = true; - } else { + if (timestamp_is_set(*p)) + (void) watchdog_set_timeout(p); + else watchdog_close(true); - m->runtime_watchdog_running = false; - } } m->watchdog_overridden[t] = timeout; - return 0; } -void manager_retry_runtime_watchdog(Manager *m) { - int r = 0; - - assert(m); - - if (timestamp_is_set(m->watchdog_overridden[WATCHDOG_RUNTIME])) - r = watchdog_set_timeout(&m->watchdog_overridden[WATCHDOG_RUNTIME]); - else - r = watchdog_set_timeout(&m->watchdog[WATCHDOG_RUNTIME]); - - if (r >= 0) - m->runtime_watchdog_running = true; -} - int manager_reload(Manager *m) { _cleanup_(manager_reloading_stopp) Manager *reloading = NULL; _cleanup_fdset_free_ FDSet *fds = NULL; diff --git a/src/core/manager.h b/src/core/manager.h index 1220c9fb161..4f1c6fec63c 100644 --- a/src/core/manager.h +++ b/src/core/manager.h @@ -248,8 +248,6 @@ struct Manager { usec_t watchdog[_WATCHDOG_TYPE_MAX]; usec_t watchdog_overridden[_WATCHDOG_TYPE_MAX]; - bool runtime_watchdog_running; /* Whether the runtime HW watchdog was started, so we know if we still need to get the real timeout from the hardware */ - dual_timestamp timestamps[_MANAGER_TIMESTAMP_MAX]; /* Data specific to the device subsystem */ @@ -566,7 +564,6 @@ ManagerTimestamp manager_timestamp_initrd_mangle(ManagerTimestamp s); usec_t manager_get_watchdog(Manager *m, WatchdogType t); void manager_set_watchdog(Manager *m, WatchdogType t, usec_t timeout); int manager_override_watchdog(Manager *m, WatchdogType t, usec_t timeout); -void manager_retry_runtime_watchdog(Manager *m); const char* oom_policy_to_string(OOMPolicy i) _const_; OOMPolicy oom_policy_from_string(const char *s) _pure_;