X-Git-Url: https://git.openafs.org/?p=openafs.git;a=blobdiff_plain;f=src%2FWINNT%2Fafsd%2Fcm_callback.c;h=5e22237f984522da6235fc9e4269b829777cebd0;hp=3076ed89dd9e36308b2b5bc6698724632761cb33;hb=fc0ca363da52144628a35abae30315257bbf76a8;hpb=81b0f9cf1d0335a1e2f8ae897ba9566c1e4962e3 diff --git a/src/WINNT/afsd/cm_callback.c b/src/WINNT/afsd/cm_callback.c index 3076ed8..5e22237 100644 --- a/src/WINNT/afsd/cm_callback.c +++ b/src/WINNT/afsd/cm_callback.c @@ -27,6 +27,7 @@ #include "afsd.h" #include #include +#include <../afsrdr/kif.h> /*extern void afsi_log(char *pattern, ...);*/ @@ -91,12 +92,6 @@ void cm_RecordRacingRevoke(cm_fid_t *fidp, long cancelFlags) lock_ReleaseWrite(&cm_callbackLock); } -#ifdef AFSIFS -#define BUF_FILEHASH(fidp) ((((fidp)->vnode+((fidp)->unique << 13) + ((fidp)->unique >> (32-13)) \ - +(fidp)->volume+(fidp)->cell) \ - /*& 0xffffffff*/)) -#endif - /* * When we lose a callback, may have to send change notification replies. * Do not call with a lock on the scp. @@ -107,7 +102,8 @@ void cm_CallbackNotifyChange(cm_scache_t *scp) HKEY hKey; DWORD dummyLen; - if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, + /* why does this have to query the registry each time? */ + if (RegOpenKeyEx( HKEY_LOCAL_MACHINE, AFSREG_CLT_OPENAFS_SUBKEY, 0, KEY_READ|KEY_QUERY_VALUE, @@ -128,16 +124,18 @@ void cm_CallbackNotifyChange(cm_scache_t *scp) if (dwDelay) Sleep(dwDelay); - if (scp->fileType == CM_SCACHETYPE_DIRECTORY) { + /* for directories, this sends a change notification on the dir itself */ + if (scp->fileType == CM_SCACHETYPE_DIRECTORY) { #ifndef AFSIFS if (scp->flags & CM_SCACHEFLAG_ANYWATCH) smb_NotifyChange(0, FILE_NOTIFY_GENERIC_DIRECTORY_FILTER, scp, NULL, NULL, TRUE); #else - dc_break_callback(BUF_FILEHASH(&scp->fid)); + dc_break_callback(FID_HASH_FN(&scp->fid)); #endif } else { + /* and for files, this sends a change notification on the file's parent dir */ cm_fid_t tfid; cm_scache_t *dscp; @@ -154,7 +152,7 @@ void cm_CallbackNotifyChange(cm_scache_t *scp) dscp, NULL, NULL, TRUE); #else if (dscp) - dc_break_callback(BUF_FILEHASH(&dscp->fid)); + dc_break_callback(FID_HASH_FN(&dscp->fid)); #endif if (dscp) cm_ReleaseSCache(dscp);