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

(cherry picked from commit d9946ba827b7099848dfe659f0eaf10167e9413b)

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

index fe34e3e62850c34aa1a13a6dfc5d85a3e99fdf73..852ef0b9c969d3f3da0cce04688a43291df2c95f 100644 (file)
@@ -189,7 +189,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 0778fcab7e4270277c4b6443a537924300b792d0..df0883030d161276e0278870d90518197ea980f0 100644 (file)
@@ -951,7 +951,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;
 
@@ -961,7 +960,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 d724a42f566c5c7df7331d384dd796b9a8b03461..931bb1fcb94b738837b28f238ec4fd331b7cc760 100644 (file)
@@ -590,8 +590,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++;
@@ -606,7 +609,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);
+        }
+    }
+
 }
 
 /*