]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Windows: cm_UpdateVolumeLocation volp locked
authorJeffrey Altman <jaltman@your-file-system.com>
Mon, 23 Jul 2012 05:38:03 +0000 (01:38 -0400)
committerJeffrey Altman <jaltman@your-file-system.com>
Mon, 23 Jul 2012 12:51:54 +0000 (05:51 -0700)
When calling cm_UpdateVolumeLocation the volp->mx must be held.
cm_Analyze() did not obtain the mutex as required.

Change-Id: Ida69105879a78692a367cd4439bee8e4bea751ff
Reviewed-on: http://gerrit.openafs.org/7839
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

index 21044e4540a25ba1ecd73cacfc584b37bb8782a3..7ba19bbdba9aff20d0e712c9dc26af9a42d89887 100644 (file)
@@ -420,15 +420,18 @@ cm_Analyze(cm_conn_t *connp,
                                      CM_GETVOL_FLAG_NO_LRU_UPDATE,
                                      &volp);
             if (code == 0) {
+                lock_ObtainWrite(&volp->rw);
                 if (cm_UpdateVolumeLocation(cellp, userp, reqp, volp) == 0) {
+                    lock_ReleaseWrite(&volp->rw);
                     code = cm_GetVolServerList(volp, fidp->volume, userp, reqp, &replicated, &serverspp);
                     if (code == 0) {
                         if (!cm_IsServerListEmpty(*serverspp))
                             retry = 1;
                         cm_FreeServerList(serverspp, 0);
                     }
+                } else {
+                    lock_ReleaseWrite(&volp->rw);
                 }
-
                 lock_ObtainRead(&cm_volumeLock);
                 cm_PutVolume(volp);
                 lock_ReleaseRead(&cm_volumeLock);