From d9946ba827b7099848dfe659f0eaf10167e9413b Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Thu, 3 May 2007 01:44:50 +0000 Subject: [PATCH] windows-flush-mountpoints-20070502 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 | 2 +- src/WINNT/afsd/cm_vnodeops.c | 3 +-- src/WINNT/afsd/cm_volume.c | 18 +++++++++++++++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/WINNT/afsd/cm_scache.c b/src/WINNT/afsd/cm_scache.c index b8a30e9a0..12f8f345f 100644 --- a/src/WINNT/afsd/cm_scache.c +++ b/src/WINNT/afsd/cm_scache.c @@ -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)); diff --git a/src/WINNT/afsd/cm_vnodeops.c b/src/WINNT/afsd/cm_vnodeops.c index f507e6e7d..e265b800d 100644 --- a/src/WINNT/afsd/cm_vnodeops.c +++ b/src/WINNT/afsd/cm_vnodeops.c @@ -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; diff --git a/src/WINNT/afsd/cm_volume.c b/src/WINNT/afsd/cm_volume.c index 517da7df0..7ad01bb50 100644 --- a/src/WINNT/afsd/cm_volume.c +++ b/src/WINNT/afsd/cm_volume.c @@ -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); + } + } + } /* -- 2.39.5