]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
libafs: retry retriable RPCs instead of abandoning
authorDerrick Brashear <shadow@dementix.org>
Wed, 22 Feb 2012 20:57:46 +0000 (15:57 -0500)
committerDerrick Brashear <shadow@dementix.org>
Wed, 22 Feb 2012 22:32:00 +0000 (14:32 -0800)
if we get e.g. an idle dead error we should retry
retriable actions, namely data stores. in order
for writing files to work correctly given how
the writeback code is structured it's important that
this not interfere with analyze's shouldRetry decision
on those RPCs

Change-Id: Ie091a72b924c8414ec66c377fa13da14575a69cf
Reviewed-on: http://gerrit.openafs.org/6749
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
src/afs/afs_analyze.c
src/afs/afs_stats.h

index 2f6e4003e10ddd01062c66a9dd6d562b90a24a45..859998ab7fa451c29f3f17c11cee5302a339ec72 100644 (file)
@@ -319,9 +319,12 @@ afs_ClearStatus(struct VenusFid *afid, int op, struct volume *avp)
        } else {
            ReleaseReadLock(&afs_xvcache);
        }
+       if (!avp)
+           afs_PutVolume(tvp, READ_LOCK);
     }
-    if (!avp)
-       afs_PutVolume(tvp, READ_LOCK);
+
+    if (AFS_STATS_FS_RPCIDXES_WRITE_RETRIABLE(op))
+       return 1;
 
     /* not retriable: we may have raced ourselves */
     return 0;
index 37b9aad7b48870110d411d623f25e5a2fe6976f0..6e46bffc7640d8ff846b6a04289390d4232af120 100644 (file)
@@ -870,6 +870,7 @@ struct afs_stats_CMPerf {
 #define AFS_STATS_NUM_FS_RPC_OPS               29
 
 #define AFS_STATS_FS_RPCIDXES_ISWRITE(X)        (((X > AFS_STATS_FS_RPCIDX_FETCHSTATUS) && (X < AFS_STATS_FS_RPCIDX_GETSTATISTICS)) || (X == AFS_STATS_FS_RPCIDX_SETVOLUMESTATUS))
+#define AFS_STATS_FS_RPCIDXES_WRITE_RETRIABLE(X) ((X >= AFS_STATS_FS_RPCIDX_STOREDATA) && (X <= AFS_STATS_FS_RPCIDX_STORESTATUS))
 
 #define AFS_STATS_FS_XFERIDX_FETCHDATA          0
 #define AFS_STATS_FS_XFERIDX_STOREDATA          1