From da2db6234221494956eca71ed3693c0a2bbf4a67 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Sun, 2 May 2010 14:48:00 -0400 Subject: [PATCH] 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 Tested-by: Jeffrey Altman --- src/WINNT/afsd/cm_freelance.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/WINNT/afsd/cm_freelance.c b/src/WINNT/afsd/cm_freelance.c index 4343de5d53..fae89d947a 100644 --- a/src/WINNT/afsd/cm_freelance.c +++ b/src/WINNT/afsd/cm_freelance.c @@ -1095,6 +1095,12 @@ long cm_FreelanceAddMount(char *filename, char *cellname, char *volume, int rw, cpath = cm_FsStringToClientStringAlloc(filename, -1, NULL); if (!cpath) 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, CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD | CM_FLAG_DFS_REFERRAL, 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); if (!cpath) 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, CM_FLAG_FOLLOW | CM_FLAG_CASEFOLD | CM_FLAG_DFS_REFERRAL, cm_rootUserp, NULL, &req, &scp);