From 0581a8ca753550645e6c1931e1195ecf81ead233 Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Sun, 21 Feb 2010 17:15:26 -0500 Subject: [PATCH] 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 (cherry picked from commit 01f42cad663cc860e451f694f973ca46f03289ff) Reviewed-on: http://gerrit.openafs.org/1359 --- src/afs/afs_analyze.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/afs/afs_analyze.c b/src/afs/afs_analyze.c index 3d70f83dc..861b7e522 100644 --- a/src/afs/afs_analyze.c +++ b/src/afs/afs_analyze.c @@ -672,12 +672,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 -- 2.39.5