Windows: Force rebuilding Freelance directory in AddMount and AddSymlink

cm_FreelanceAddMount and cm_FreelanceAddSymlink is supposed to
return the allocated FID of the entry that was added.  However,
cm_NameI is called to perform the lookup without forcing an update
of the Freelance fake directory.  As a result the entry may not be
found.

Force an update prior to calling cm_NameI() by using
cm_clearLocalMountPointChange() and cm_reInitLocalMountPoints()
if required.

LICENSE MIT

Change-Id: I08147b2ec61c810fdc718964362315af67d485b8
Reviewed-on: http://gerrit.openafs.org/1890
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>
This commit is contained in:
Jeffrey Altman 2010-05-02 14:48:00 -04:00 committed by Jeffrey Altman
parent f8efae8c70
commit da2db62342

View File

@ -1095,6 +1095,12 @@ long cm_FreelanceAddMount(char *filename, char *cellname, char *volume, int rw,
cpath = cm_FsStringToClientStringAlloc(filename, -1, NULL); cpath = cm_FsStringToClientStringAlloc(filename, -1, NULL);
if (!cpath) if (!cpath)
return CM_ERROR_NOSUCHPATH; return CM_ERROR_NOSUCHPATH;
if (cm_getLocalMountPointChange()) { // check for changes
cm_clearLocalMountPointChange(); // clear the changefile
cm_reInitLocalMountPoints(); // start reinit
}
code = cm_NameI(cm_data.rootSCachep, cpath, code = cm_NameI(cm_data.rootSCachep, cpath,
CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD | CM_FLAG_DFS_REFERRAL, CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD | CM_FLAG_DFS_REFERRAL,
cm_rootUserp, NULL, &req, &scp); cm_rootUserp, NULL, &req, &scp);
@ -1322,6 +1328,12 @@ long cm_FreelanceAddSymlink(char *filename, char *destination, cm_fid_t *fidp)
cpath = cm_FsStringToClientStringAlloc(filename, -1, NULL); cpath = cm_FsStringToClientStringAlloc(filename, -1, NULL);
if (!cpath) if (!cpath)
return CM_ERROR_NOSUCHPATH; return CM_ERROR_NOSUCHPATH;
if (cm_getLocalMountPointChange()) { // check for changes
cm_clearLocalMountPointChange(); // clear the changefile
cm_reInitLocalMountPoints(); // start reinit
}
code = cm_NameI(cm_data.rootSCachep, cpath, code = cm_NameI(cm_data.rootSCachep, cpath,
CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD | CM_FLAG_DFS_REFERRAL, CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD | CM_FLAG_DFS_REFERRAL,
cm_rootUserp, NULL, &req, &scp); cm_rootUserp, NULL, &req, &scp);