}
/* 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));
cm_SyncOpDone(scp, bufp, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_READ);
-
if (cm_HaveBuffer(scp, bufp, 0))
break;
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;
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++;
}
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);
+ }
+ }
+
}
/*