Windows: Protect against infinite VIO retries
[openafs.git] / src / WINNT / afsd / cm_conn.h
index 4a1a6ad..e8b1076 100644 (file)
@@ -46,11 +46,12 @@ typedef struct cm_conn {
         afs_int32 refCount;            /* Interlocked */
        int ucgen;                      /* ucellp's generation number */
         afs_uint32 flags;              /* locked by mx */
-       int cryptlevel;                 /* encrytion status */
+       int cryptlevel;                 /* encryption status */
 } cm_conn_t;
 
 #define CM_CONN_FLAG_FORCE_NEW          1
 #define CM_CONN_FLAG_REPLICATION        2
+#define CM_CONN_FLAG_NEW                4
 
 /*
  * structure used for tracking RPC progress
@@ -66,6 +67,8 @@ typedef struct cm_req {
     int tokenError;
     int idleError;
     int vnovolError;
+    int volbusyCount;
+    int vioCount;
     afs_uint32 flags;
     clientchar_t * tidPathp;
     clientchar_t * relPathp;
@@ -133,6 +136,16 @@ typedef struct cm_req {
 #endif
 #include "rx.h"
 
+/*
+ * connp->serverp can be accessed without holding a lock because that
+ * never changes once the connection is created.
+ */
+#define SERVERHAS64BIT(connp) (!((connp)->serverp->flags & CM_SERVERFLAG_NO64BIT))
+#define SET_SERVERHASNO64BIT(connp) (cm_SetServerNo64Bit((connp)->serverp, TRUE))
+
+#define SERVERHASINLINEBULK(connp) (!((connp)->serverp->flags & CM_SERVERFLAG_NOINLINEBULK))
+#define SET_SERVERHASNOINLINEBULK(connp) (cm_SetServerNoInlineBulk((connp)->serverp, TRUE))
+
 extern void cm_InitConn(void);
 
 extern void cm_InitReq(cm_req_t *reqp);
@@ -140,8 +153,9 @@ extern void cm_InitReq(cm_req_t *reqp);
 extern int cm_Analyze(cm_conn_t *connp, struct cm_user *up, struct cm_req *reqp,
                       struct cm_fid *fidp, struct cm_cell *cellp,
                       afs_uint32 storeOp,
+                      struct AFSFetchStatus *statusp,
                       struct AFSVolSync *volInfop,
-                      cm_serverRef_t * serversp,
+                      cm_serverRef_t ** vlServerspp,
                       struct cm_callbackRequest *cbrp, long code);
 
 extern long cm_ConnByMServers(struct cm_serverRef *, afs_uint32, struct cm_user *,