[dm-devel] [PATCH 06/35] multipathd: fix systemd notification when stopping while reloading
mwilck at suse.com
mwilck at suse.com
Fri Sep 10 11:40:51 UTC 2021
From: Martin Wilck <mwilck at suse.com>
After sending "RELOADING=1" to systemd, a service must send
"READY=1" before "STOPPING=1". Otherwise systemd will be confused
and will not regard the service as stopped. Subsequent attempts
to start multipathd via socket activation fail until systemd times
out the reload operation.
The problem can be reproduced by running "multipathd shutdown"
quickly after "multipathd reconfigure".
Signed-off-by: Martin Wilck <mwilck at suse.com>
---
multipathd/main.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/multipathd/main.c b/multipathd/main.c
index 3aff241..67160b9 100644
--- a/multipathd/main.c
+++ b/multipathd/main.c
@@ -210,9 +210,12 @@ static void do_sd_notify(enum daemon_status old_state,
if (msg && !safe_sprintf(notify_msg, "STATUS=%s", msg))
sd_notify(0, notify_msg);
- if (new_state == DAEMON_SHUTDOWN)
+ if (new_state == DAEMON_SHUTDOWN) {
+ /* Tell systemd that we're not RELOADING any more */
+ if (old_state == DAEMON_CONFIGURE && startup_done)
+ sd_notify(0, "READY=1");
sd_notify(0, "STOPPING=1");
- else if (new_state == DAEMON_IDLE && old_state == DAEMON_CONFIGURE) {
+ } else if (new_state == DAEMON_IDLE && old_state == DAEMON_CONFIGURE) {
sd_notify(0, "READY=1");
startup_done = true;
} else if (new_state == DAEMON_CONFIGURE && startup_done)
--
2.33.0
More information about the dm-devel
mailing list