The following commit has been merged in the master branch: commit f951a9bf9b26e22475715b3ba82b00a30d379272 Author: Andrew Deason <adea...@sinenomine.net> Date: Mon Feb 12 15:41:36 2024 -0600
RedHat: Make client unit start/stop more robust Our openafs-client.service systemd unit currently has some unfortunate behaviors: - If someone runs 'systemctl stop openafs-client' and someone is using /afs, our umount will fail, and systemd will consider the openafs-client unit failed and deactivated. Trying to stop the unit again won't do anything, and trying to start the unit will fail because of our 'fs sysname' check. The client can then only be stopped by manually running umount/rmmod. - If our kernel module is already initialized (because afsd failed during startup, or someone 'umount'd /afs without unloading the kernel module), running 'systemctl start openafs-client' will try to start afsd with an already-initialized kernel module, which will either fail or cause errors/panics. To improve this situation, change our startup sequence to unload the kernel module if it's already loaded (and then load it again right afterwards). This should guarantee that we won't use an already-initialized kernel module when we run afsd. This also means we will fail during startup if the kernel module cannot be unloaded for any reason (for example, if the client is already running but the 'fs sysname' check somehow didn't detect this). Also change our 'fs sysname' check to return success if the client is already running, instead of failure. This means that after a failed 'stop', the user can run 'start' and then 'stop' again to try and stop the client. Just running 'stop' again still won't do anything, which is not ideal, but that's just how systemd works. Move our 'afsd -shutdown' and 'rmmod' steps into ExecStopPost, so they may get run in some additional corner cases for a partially-initialized service. Add --verbose to a few commands, to make it a little clearer what's happening in what order in systemd logs. If we cannot unload the openafs kernel module when stopping (because, for example, we couldn't 'umount /afs' because it was in use), log some information about how the user can actually get the client stopped. Change-Id: I78463160a1835137efaeeb0f27bb19c78171e9da Reviewed-on: https://gerrit.openafs.org/15647 Tested-by: BuildBot <build...@rampaginggeek.com> Reviewed-by: Cheyenne Wills <cwi...@sinenomine.net> Reviewed-by: Michael Meffie <mmef...@sinenomine.net> Reviewed-by: Andrew Deason <adea...@sinenomine.net> .../RedHat/openafs-client-systemd-helper.sh | 50 ++++++++++++++++++---- src/packaging/RedHat/openafs-client.service | 2 +- 2 files changed, 42 insertions(+), 10 deletions(-) -- OpenAFS Master Repository _______________________________________________ OpenAFS-cvs mailing list OpenAFS-cvs@openafs.org https://lists.openafs.org/mailman/listinfo/openafs-cvs