From: Jeffrey Altman Date: Sun, 2 May 2010 18:48:00 +0000 (-0400) Subject: Windows: Force rebuilding Freelance directory in AddMount and AddSymlink X-Git-Tag: openafs-devel-1_5_75~333 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=da2db6234221494956eca71ed3693c0a2bbf4a67;p=packages%2Fo%2Fopenafs.git 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 --- diff --git a/src/WINNT/afsd/cm_freelance.c b/src/WINNT/afsd/cm_freelance.c index 4343de5d5..fae89d947 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);