]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Windows: Do not probe new servers from cm_UpdateVolumeLocation
authorJeffrey Altman <jaltman@your-file-system.com>
Wed, 6 Jul 2011 22:19:31 +0000 (18:19 -0400)
committerJeffrey Altman <jaltman@openafs.org>
Sat, 9 Jul 2011 12:13:07 +0000 (05:13 -0700)
cm_NewServer() can result in a call to cm_UpdateVolumeLocation()
if a server probe is performed.   In order to avoid recursive
calls to cm_UpdateVolumeLocation() do not probe new servers from
within cm_UpdateVolumeLocation().

Reviewed-on: http://gerrit.openafs.org/4922
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>
(cherry picked from commit 1a56229910a67cc782959beb45f56d244d6b3c4f)

Change-Id: Iaf41b1c6c1aa84791a02451533be0e66aaf85fd1
Reviewed-on: http://gerrit.openafs.org/4951
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>
src/WINNT/afsd/cm_volume.c

index ba6607e59f014cdf62bfcfe499e06aa72a77695b..46061069ecd556c67ba566a122a8b0158569ae8e 100644 (file)
@@ -544,10 +544,12 @@ long cm_UpdateVolumeLocation(struct cm_cell *cellp, cm_user_t *userp, cm_req_t *
             if (!tsp) {
                 /*
                  * cm_NewServer will probe the file server which in turn will
-                 * update the state on the volume group object
+                 * update the state on the volume group object.  Do not probe
+                 * in this thread.  It will block the thread and can result in
+                 * a recursive call to cm_UpdateVolumeLocation().
                  */
                 lock_ReleaseWrite(&volp->rw);
-                tsp = cm_NewServer(&tsockAddr, CM_SERVER_FILE, cellp, &serverUUID[i], 0);
+                tsp = cm_NewServer(&tsockAddr, CM_SERVER_FILE, cellp, &serverUUID[i], CM_FLAG_NOPROBE);
                 lock_ObtainWrite(&volp->rw);
             }
             osi_assertx(tsp != NULL, "null cm_server_t");