OpenAFS Master Repository branch, master, updated. openafs-devel-1_9_1-480-gf951a9b
Gerrit Code Review
gerrit@openafs.org
Thu, 22 Aug 2024 10:15:49 -0400
The following commit has been merged in the master branch:
commit f951a9bf9b26e22475715b3ba82b00a30d379272
Author: Andrew Deason <adeason@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 <buildbot@rampaginggeek.com>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Andrew Deason <adeason@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