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

Reply via email to