From: Derrick Brashear Date: Sun, 21 Feb 2010 22:15:26 +0000 (-0500) Subject: idledead client dont interrupt writes X-Git-Tag: openafs-devel-1_5_73~154 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=01f42cad663cc860e451f694f973ca46f03289ff;p=packages%2Fo%2Fopenafs.git idledead client dont interrupt writes allowing failover is nonsensical, there's nothing to fail to. keep trying to write. if we want to change this, we need to handle it better than just this. Change-Id: Ibed4c63182f44ed9e659895e4868b4192d004688 Reviewed-on: http://gerrit.openafs.org/1355 Tested-by: Stephan Wiesand Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- diff --git a/src/afs/afs_analyze.c b/src/afs/afs_analyze.c index e9f0049df..443fae378 100644 --- a/src/afs/afs_analyze.c +++ b/src/afs/afs_analyze.c @@ -458,12 +458,17 @@ afs_Analyze(register struct afs_conn *aconn, afs_int32 acode, if ((acode < 0) && (acode != VRESTARTING)) { if (acode == RX_CALL_TIMEOUT) { serversleft = afs_BlackListOnce(areq, afid, tsp); - areq->idleError++; - if (serversleft) { - shouldRetry = 1; - } else { + tvp = afs_FindVolume(afid, READ_LOCK); + if (!tvp || (tvp->states & VRO)) + areq->idleError++; + if ((serversleft == 0) && tvp && + ((tvp->states & VRO) || (tvp->states & VBackup))) { shouldRetry = 0; + } else { + shouldRetry = 1; } + if (tvp) + afs_PutVolume(tvp, READ_LOCK); /* By doing this, we avoid ever marking a server down * in an idle timeout case. That's because the server is * still responding and may only be letting a single vnode