[dm-devel] [PATCH 06/35] multipathd: fix systemd notification when stopping while reloading

Benjamin Marzinski bmarzins at redhat.com
Wed Sep 15 22:55:18 UTC 2021


On Fri, Sep 10, 2021 at 01:40:51PM +0200, mwilck at suse.com wrote:
> 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".
> 
Reviewed-by: Benjamin Marzinski <bmarzins at redhat.com>
> 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