> 4. a few mods to your patch (see below)
Thanks for the careful review :)
> In the patch I think it overall makes sense to harden/improve the
shutdown - even not being able to reproduce yet, here some patch
feedback:
> +pid="$(pidof multipathd)"
> I think this should get some safety if this does not return a pid.
> There might be reasons to do so, and these should skip the whole shutdown
> part.
If I understood it correctly, it does.
And the whole shutdown is skipped in case 'multipathd -kshutdown' failed
and PID is null (as kill_stage does not progress into 1,2,3)
+if [ "$out" = 'ok' ] \
+|| ( [ -n "$pid" ] && /bin/kill -SIGINT $pid ) \
+|| ( [ -n "$pid" ] && /bin/kill -SIGKILL $pid ); then
+ kill_stage=1
+fi
Maybe I'm missing something in your point?
> Also there might be some theoretical cases where the
> +out="$(/sbin/multipathd -k'shutdown')"
> As a side effect could make the pid change, so please re-arrange the pidof
> and the shutdown.
I'm afraid I don't see that theoretical case happening.
Can you please elaborate a bit more on that, for my own education?
As far as I see, the -k switch just connects to the multipathd socket
(which should be running from the daemonized multipathd instance),
sends the argument/command to it, and exit.
multipathd/main.c::main()
case 'k':
conf = load_config(DEFAULT_CONFIGFILE);
if (!conf)
exit(1);
if (verbosity)
conf->verbosity = verbosity;
uxclnt(optarg, uxsock_timeout + 100);
exit(0);
And the uxclnt() call tries to connect to the socket (i.e., implies
multipathd already running), and if it fails (e.g., multipathd not
running), it just exits -- doesn't try to restart it / PID change.
So I'm not sure how that could happen.
> BTW - Is the shutdown synchronous?
No, it's async. Any command from 'multipathd -k' (cli instance)
is sent to multipathd (daemonized instance) via unix socket,
and the cli instance immediately exits.
Then the daemonized instance handles it there.
The shutdown, for example, gets 'running_state' set to
DAEMON_SHUTDOWN, and that is broadcast to other pthreads.
The one which is running child() will take it and proceed
into free/unload/shutdown.
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1670811
Title:
Multipath services fails to start on Ubuntu 17.04 on boot and kdump
(initramfs)
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/multipath-tools/+bug/1670811/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs