From 4ed91fe59468ed6c834f968a5b8202e967ea43b5 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Wed, 22 Feb 2012 14:19:51 -0500 Subject: [PATCH] Windows: invalidate data version on link creation notify the redirector that the directory data version has changed when a pioctl is used to create a symlink or mount point. FIXES 130589 Change-Id: I07e1ae130b9db8d3dd68fef892c47de008be7cd4 Reviewed-on: http://gerrit.openafs.org/6747 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsd/cm_ioctl.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/WINNT/afsd/cm_ioctl.c b/src/WINNT/afsd/cm_ioctl.c index 078ef6a..ead5cc1 100644 --- a/src/WINNT/afsd/cm_ioctl.c +++ b/src/WINNT/afsd/cm_ioctl.c @@ -2106,10 +2106,16 @@ cm_IoctlCreateMountPoint(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scac code = cm_SymLink(dscp, leaf, mpInfo, 0, &tattr, userp, reqp, NULL); } - if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH)) - smb_NotifyChange(FILE_ACTION_ADDED, - FILE_NOTIFY_CHANGE_DIR_NAME, - dscp, leaf, NULL, TRUE); + if (code == 0) { + if (dscp->flags & CM_SCACHEFLAG_ANYWATCH) + smb_NotifyChange(FILE_ACTION_ADDED, + FILE_NOTIFY_CHANGE_DIR_NAME, + dscp, leaf, NULL, TRUE); + + if (RDR_Initialized) + RDR_InvalidateObject(dscp->fid.cell, dscp->fid.volume, dscp->fid.vnode, dscp->fid.unique, + dscp->fid.hash, dscp->fileType, AFS_INVALIDATE_DATA_VERSION); + } done: if (volp) @@ -2175,11 +2181,18 @@ cm_IoctlSymlink(struct cm_ioctl *ioctlp, struct cm_user *userp, cm_scache_t *dsc code = cm_SymLink(dscp, leaf, cp, 0, &tattr, userp, reqp, NULL); } - if (code == 0 && (dscp->flags & CM_SCACHEFLAG_ANYWATCH)) - smb_NotifyChange(FILE_ACTION_ADDED, - FILE_NOTIFY_CHANGE_FILE_NAME - | FILE_NOTIFY_CHANGE_DIR_NAME, - dscp, leaf, NULL, TRUE); + if (code == 0) { + if (dscp->flags & CM_SCACHEFLAG_ANYWATCH) + smb_NotifyChange(FILE_ACTION_ADDED, + FILE_NOTIFY_CHANGE_FILE_NAME + | FILE_NOTIFY_CHANGE_DIR_NAME, + dscp, leaf, NULL, TRUE); + + if (RDR_Initialized) + RDR_InvalidateObject(dscp->fid.cell, dscp->fid.volume, dscp->fid.vnode, dscp->fid.unique, + dscp->fid.hash, dscp->fileType, AFS_INVALIDATE_DATA_VERSION); + } + return code; } -- 1.9.4