unix: always retry RX_CALL_BUSY
authorJeffrey Altman <jaltman@your-file-system.com>
Thu, 1 Mar 2012 20:49:12 +0000 (15:49 -0500)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Fri, 2 Mar 2012 13:19:59 +0000 (05:19 -0800)
RX_CALL_BUSY is an indication that the call channel is busy not
that the server is down or otherwise cannot respond.  Unconditionally
retry the RPC and do not alter state.  We just want to force the use
of a different call channel.

Change-Id: Ic4ef9bac800087f1b287d3da08fcd5eec84374ef
Reviewed-on: http://gerrit.openafs.org/6852
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Hartmut Reuter <reuter@rzg.mpg.de>
Reviewed-by: Jeffrey Altman <jaltman@secure-endpoints.com>
Tested-by: Jeffrey Altman <jaltman@secure-endpoints.com>

src/afs/afs_analyze.c

index 859998a..9a2087c 100644 (file)
@@ -568,11 +568,11 @@ afs_Analyze(struct afs_conn *aconn, struct rx_connection *rxconn,
        acode = 455;
 #endif /* AFS_64BIT_CLIENT */
     if ((acode < 0) && (acode != VRESTARTING)) {
-       if (acode == RX_MSGSIZE) {
+       if (acode == RX_MSGSIZE || acode == RX_CALL_BUSY) {
            shouldRetry = 1;
            goto out;
        }
-       if (acode == RX_CALL_TIMEOUT || acode == RX_CALL_IDLE || acode == RX_CALL_BUSY) {
+       if (acode == RX_CALL_TIMEOUT || acode == RX_CALL_IDLE) {
            serversleft = afs_BlackListOnce(areq, afid, tsp);
            if (afid)
                tvp = afs_FindVolume(afid, READ_LOCK);