]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
windows-flush-mountpoints-20070502
authorJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 3 May 2007 01:44:50 +0000 (01:44 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 3 May 2007 01:44:50 +0000 (01:44 +0000)
When flushing volume location information also flush the mount point
data.  This change results in behavior that matchs the Unix client.

src/WINNT/afsd/cm_scache.c
src/WINNT/afsd/cm_vnodeops.c
src/WINNT/afsd/cm_volume.c

index b8a30e9a0118fc9ce2629f7b251d8479227cd5d0..12f8f345f6e891043197c04311eb059e12df8bda 100644 (file)
@@ -187,7 +187,7 @@ long cm_RecycleSCache(cm_scache_t *scp, afs_int32 flags)
     }
 
     /* discard symlink info */
-    scp->mountPointStringp[0] = 0;
+    scp->mountPointStringp[0] = '\0';
     memset(&scp->mountRootFid, 0, sizeof(cm_fid_t));
     memset(&scp->dotdotFid, 0, sizeof(cm_fid_t));
 
index f507e6e7d6611b8b36aeec781daf54d5cdcc8ca6..e265b800dc387b8d0caaa68755f8c12f978b1e7f 100644 (file)
@@ -949,7 +949,6 @@ long cm_ReadMountPoint(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
 
        cm_SyncOpDone(scp, bufp, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_READ);
 
-
         if (cm_HaveBuffer(scp, bufp, 0)) 
             break;
 
@@ -959,7 +958,7 @@ long cm_ReadMountPoint(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp)
             goto done;
     }
     /* locked, has callback, has valid data in buffer */
-    if ((tlen = scp->length.LowPart) > 1000
+    if ((tlen = scp->length.LowPart) > MOUNTPOINTLEN - 1
         return CM_ERROR_TOOBIG;
     if (tlen <= 0) {
         code = CM_ERROR_INVAL;
index 517da7df03cfa53233b10b3c11008732a50e3394..7ad01bb50c89c292458cd777b3c7a36f31361820 100644 (file)
@@ -586,8 +586,11 @@ long cm_GetROVolumeID(cm_volume_t *volp)
 void cm_RefreshVolumes(void)
 {
     cm_volume_t *volp;
+    cm_scache_t *scp;
 
     cm_data.mountRootGen = time(NULL);
+
+    /* force a re-loading of volume data from the vldb */
     lock_ObtainWrite(&cm_volumeLock);
     for (volp = cm_data.allVolumesp; volp; volp=volp->nextp) {
        volp->refCount++;
@@ -602,7 +605,20 @@ void cm_RefreshVolumes(void)
     }
     lock_ReleaseWrite(&cm_volumeLock);
 
-    /* We should also refresh cached mount points */
+    /* force mount points to be re-evaluated so that 
+     * if the volume location has changed we will pick 
+     * that up
+     */
+    for ( scp = cm_data.scacheLRUFirstp; 
+          scp;
+          scp = (cm_scache_t *) osi_QNext(&scp->q)) {
+        if ( scp->fileType == CM_SCACHETYPE_MOUNTPOINT ) {
+            lock_ObtainMutex(&scp->mx);
+            scp->mountPointStringp[0] = '\0';
+            lock_ReleaseMutex(&scp->mx);
+        }
+    }
+
 }
 
 /*