]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Windows: Modify cm_GetVolServers and cm_GetServerList
authorJeffrey Altman <jaltman@your-file-system.com>
Thu, 5 Jul 2012 22:06:13 +0000 (18:06 -0400)
committerJeffrey Altman <jaltman@your-file-system.com>
Fri, 6 Jul 2012 03:32:26 +0000 (20:32 -0700)
Move the determination of the 'replicated' state into
cm_GetVolServers() so that cm_GetServerList() and
cm_ConnFromVolume() can be implemented without duplicating
the resolution of the cm_vol_state_t object.

Change-Id: I355cb2cdf7e327742df7936171ad3dc604f135df
Reviewed-on: http://gerrit.openafs.org/7721
Reviewed-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Tested-by: Jeffrey Altman <jaltman@your-file-system.com>
src/WINNT/afsd/cm_conn.c
src/WINNT/afsd/cm_ioctl.c
src/WINNT/afsd/cm_volume.c
src/WINNT/afsd/cm_volume.h

index 0be99fcc05a57771421f02f61f405e2bacfdbf05..7774c1671f3017d6f277f1dfaaa1d5f274993963 100644 (file)
@@ -215,7 +215,6 @@ long cm_GetServerList(struct cm_fid *fidp, struct cm_user *userp,
 {
     long code;
     cm_volume_t *volp = NULL;
-    cm_vol_state_t *volstatep = NULL;
     cm_cell_t *cellp = NULL;
 
     if (!fidp) {
@@ -231,9 +230,7 @@ long cm_GetServerList(struct cm_fid *fidp, struct cm_user *userp,
     if (code)
         return code;
 
-    volstatep = cm_VolumeStateByID(volp, fidp->volume);
-    *replicated = (volstatep->flags & CM_VOL_STATE_FLAG_REPLICATED);
-    *serversppp = cm_GetVolServers(volp, fidp->volume, userp, reqp);
+    *serversppp = cm_GetVolServers(volp, fidp->volume, userp, reqp, replicated);
 
     lock_ObtainRead(&cm_volumeLock);
     cm_PutVolume(volp);
@@ -1702,13 +1699,10 @@ long cm_ConnFromVolume(struct cm_volume *volp, unsigned long volid, struct cm_us
     long code;
     cm_serverRef_t **serverspp;
     afs_uint32 replicated;
-    cm_vol_state_t * volstatep;
 
     *connpp = NULL;
 
-    volstatep = cm_VolumeStateByID(volp, volid);
-    replicated = (volstatep->flags & CM_VOL_STATE_FLAG_REPLICATED);
-    serverspp = cm_GetVolServers(volp, volid, userp, reqp);
+    serverspp = cm_GetVolServers(volp, volid, userp, reqp, &replicated);
 
     code = cm_ConnByMServers(*serverspp, replicated, userp, reqp, connpp);
     cm_FreeServerList(serverspp, 0);
index 990ebfcaaf4cc6a67831447d60f7f635c94350e7..026b9845314a5bb8f04d01e5b383878c1df7b854 100644 (file)
@@ -1060,7 +1060,7 @@ cm_IoctlWhereIs(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *scp
 
         cp = ioctlp->outDatap;
 
-        tsrpp = cm_GetVolServers(tvp, volume, userp, reqp);
+        tsrpp = cm_GetVolServers(tvp, volume, userp, reqp, NULL);
         if (tsrpp == NULL) {
             code = CM_ERROR_NOSUCHVOLUME;
         } else {
index 951e047b2bb9c686318a3b8ba938c2e482fe51c1..a3772e46807b5fb99ba7206e16c02f1721884d2a 100644 (file)
@@ -1139,22 +1139,22 @@ long cm_ForceUpdateVolume(cm_fid_t *fidp, cm_user_t *userp, cm_req_t *reqp)
 }
 
 /* find the appropriate servers from a volume */
-cm_serverRef_t **cm_GetVolServers(cm_volume_t *volp, afs_uint32 volume, cm_user_t *userp, cm_req_t *reqp)
+cm_serverRef_t **cm_GetVolServers(cm_volume_t *volp, afs_uint32 volid, cm_user_t *userp, cm_req_t *reqp, afs_uint32 *replicated)
 {
     cm_serverRef_t **serverspp;
     cm_serverRef_t *current;
     int firstTry = 1;
+    cm_vol_state_t *volstatep = NULL;
 
   start:
-    lock_ObtainWrite(&cm_serverLock);
+    volstatep = cm_VolumeStateByID(volp, volid);
 
-    if (volume == volp->vol[RWVOL].ID)
-        serverspp = &volp->vol[RWVOL].serversp;
-    else if (volume == volp->vol[ROVOL].ID)
-        serverspp = &volp->vol[ROVOL].serversp;
-    else if (volume == volp->vol[BACKVOL].ID)
-        serverspp = &volp->vol[BACKVOL].serversp;
-    else {
+    lock_ObtainWrite(&cm_serverLock);
+    if (volstatep) {
+        if (replicated)
+            *replicated = (volstatep->flags & CM_VOL_STATE_FLAG_REPLICATED);
+        serverspp = &volstatep->serversp;
+    } else {
         lock_ReleaseWrite(&cm_serverLock);
         if (firstTry) {
             afs_int32 code;
index 3addb4e19d831c40d279c5129fb8b161f4a28a93..d17103be04c4820107ff310c223681d5c0f0e289 100644 (file)
@@ -111,7 +111,7 @@ extern long cm_ForceUpdateVolume(struct cm_fid *fidp, cm_user_t *userp,
        cm_req_t *reqp);
 
 extern cm_serverRef_t **cm_GetVolServers(cm_volume_t *volp, afs_uint32 volume,
-                                         cm_user_t *userp, cm_req_t *reqp);
+                                         cm_user_t *userp, cm_req_t *reqp, afs_uint32 *replicated);
 
 extern void cm_ChangeRankVolume(cm_server_t *tsp);