OpenAFS Master Repository branch, openafs-stable-1_8_x, updated. openafs-stable-1_8_8_1-12-g9744981

Gerrit Code Review
Thu, 4 Aug 2022 11:32:37 -0400

The following commit has been merged in the openafs-stable-1_8_x branch:
commit 97449810aca0448c50e1afa162a24b1cad99a62b
Author: Andrew Deason <>
Date:   Fri Apr 16 11:11:35 2021 -0500

    rx: Remove delays in multi_End_Ignore
    When using our multi_Rx mechanism, callers can use either multi_End or
    multi_End_Ignore at the end of the multi_Rx block. Among other things,
    these macros run 'rx_EndCall(call, code)' for each call in the
    multi_Rx invocation that hasn't already ended. For multi_End, 'code'
    is RX_USER_ABORT, and for multi_End_Ignore, 'code' is 0; the macros
    are otherwise equivalent.
    When multi_End is used, this means any un-ended calls are aborted with
    RX_USER_ABORT, and the call immediately ends. But when
    multi_End_Ignore is used, the call is not aborted, and so we must wait
    for the peer to acknowledge that it has received our packets before
    ending (done via an rxi_ReadProc call in rx_EndCall).
    This means that if a caller multi_Abort's out of a multi call and uses
    multi_End_Ignore, we'll wait for the peer to acknowledge our packets
    for all of the calls we haven't processed. Waiting for that is a
    complete waste of time, since we don't care about the results of those
    calls (since we multi_Abort'd). This doesn't matter much if those
    calls are responded to promptly, but if the peer is not up or is just
    slow, it can cause us to wait several seconds until we timeout.
    There are currently only three users of multi_End_Ignore:
    - DoProbe in src/ubik/recovery.c
    - MultiBreakCallBackAlternateAddress_r in src/viced/callback.c
    - MultiProbeAlternateAddress_r in src/viced/callback.c
    All of these use multi_Rx to try and probe multiple IPs for the same
    machine in parallel, and so some of the calls may very well be trying
    to contact unreachable IPs; we only need one to work for the call to
    To avoid the unnecessary delays in these codepaths, convert them to
    use multi_End. Change multi_End_Ignore to be the same as multi_End,
    and multi_Finalize_Ignore to the same as multi_Finalize, to make sure
    the bad behavior is not used. The _Ignore macros/functions are now
    unused in the tree, but keep them around for now since
    multi_Finalize_Ignore is exported by libafsrpc.
    Thanks to for discovering this weird behavior.
    Tested-by: BuildBot <>
    Reviewed-by: Cheyenne Wills <>
    Reviewed-by: Benjamin Kaduk <>
    (cherry picked from commit 002b031d01e3c0f2ad3e1069b98800c3a7228bd5)
    Change-Id: Ic49c0810bdc9643600a5c060bef4a669798afaf3
    Reviewed-by: Andrew Deason <>
    Reviewed-by: Michael Meffie <>
    Reviewed-by: Cheyenne Wills <>
    Tested-by: BuildBot <>
    Reviewed-by: Marcio Brito Barbosa <>
    Reviewed-by: Stephan Wiesand <>

 src/rx/rx_multi.c    | 15 ++-------------
 src/rx/rx_multi.h    |  6 ++----
 src/ubik/recovery.c  |  2 +-
 src/viced/callback.c |  4 ++--
 4 files changed, 7 insertions(+), 20 deletions(-)

OpenAFS Master Repository