#include <string.h>
#include <stdlib.h>
+#include "afsd.h"
#include <osi.h>
#include <rx_pthread.h>
-#include "afsd.h"
#include <WINNT/syscfg.h>
#include <WINNT/afsreg.h>
+#include <../afsrdr/kif.h>
/*extern void afsi_log(char *pattern, ...);*/
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.
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,
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;
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);
{
cm_HoldSCacheNoLock(scp);
lock_ReleaseWrite(&cm_scacheLock);
- osi_Log4(afsd_logp, "RevokeCallback Discarding SCache scp 0x%x vol %u vn %u uniq %u",
+ osi_Log4(afsd_logp, "RevokeCallback Discarding SCache scp 0x%p vol %u vn %u uniq %u",
scp, scp->fid.volume, scp->fid.vnode, scp->fid.unique);
lock_ObtainMutex(&scp->mx);
cm_DiscardSCache(scp);
cm_HoldSCacheNoLock(scp);
lock_ReleaseWrite(&cm_scacheLock);
lock_ObtainMutex(&scp->mx);
- osi_Log4(afsd_logp, "RevokeVolumeCallback Discarding SCache scp 0x%x vol %u vn %u uniq %u",
+ osi_Log4(afsd_logp, "RevokeVolumeCallback Discarding SCache scp 0x%p vol %u vn %u uniq %u",
scp, scp->fid.volume, scp->fid.vnode, scp->fid.unique);
cm_DiscardSCache(scp);
lock_ReleaseMutex(&scp->mx);
if (scp->cbExpires > 0 && scp->cbServerp != NULL) {
/* we have a callback, now decide if we should clear it */
if (scp->cbServerp == tsp || tsp == NULL) {
- osi_Log4(afsd_logp, "InitCallbackState Discarding SCache scp 0x%x vol %u vn %u uniq %u",
+ osi_Log4(afsd_logp, "InitCallbackState Discarding SCache scp 0x%p vol %u vn %u uniq %u",
scp, scp->fid.volume, scp->fid.vnode, scp->fid.unique);
cm_DiscardSCache(scp);
discarded = 1;
lock_ReleaseWrite(&cm_scacheLock);
+ /* reset the No 64-bit flag on the server */
+ cm_SetServerNo64Bit(tsp, 0);
+
/* we're done with the server structure */
if (tsp)
cm_PutServer(tsp);
cep->Length.high = scp->length.HighPart;
cep->Length.low = scp->length.LowPart;
#else
- cep->Length = ((afs_int64)scp->length.HighPart)<<32 | scp->length.LowPart;
+ cep->Length = (afs_int64) scp->length.QuadPart;
#endif
cep->DataVersion = scp->dataVersion;
cep->callback = afs_data_pointer_to_int32(scp->cbServerp);
dataBytes = 1 * sizeof(afs_int32);
dataBuffP = (afs_int32 *) osi_Alloc(dataBytes);
- dataBuffP[0] = CAPABILITY_ERRORTRANS;
+ dataBuffP[0] = CLIENT_CAPABILITY_ERRORTRANS;
capabilities->Capabilities_len = dataBytes / sizeof(afs_int32);
capabilities->Capabilities_val = dataBuffP;
afs_MarshallCacheConfig(callerVersion, &cm_initParams, t_config);
*serverVersion = AFS_CLIENT_RETRIEVAL_FIRST_EDITION;
- *configCount = allocsize;
+#ifdef DEBUG
+#ifndef SIZE_MAX
+#define SIZE_MAX UINT_MAX
+#endif
+ osi_assert(allocsize < SIZE_MAX);
+#endif
+ *configCount = (afs_uint32)allocsize;
config->cacheConfig_val = t_config;
- config->cacheConfig_len = allocsize/sizeof(afs_uint32);
+ config->cacheConfig_len = (*configCount)/sizeof(afs_uint32);
MUTEX_EXIT(&callp->lock);
return 0;
(revp->flags & CM_RACINGFLAG_CANCELALL))) {
/* this one matches */
osi_Log4(afsd_logp,
- "Racing revoke scp 0x%x old cbc %d rev cbc %d cur cbc %d",
+ "Racing revoke scp 0x%p old cbc %d rev cbc %d cur cbc %d",
scp,
cbrp->callbackCount, revp->callbackCount,
cm_callbackCount);
cm_fid_t sfid;
struct rx_connection * callp;
- osi_Log4(afsd_logp, "GetCallback scp 0x%x cell %d vol %d flags %lX",
+ osi_Log4(afsd_logp, "GetCallback scp 0x%p cell %d vol %d flags %lX",
scp, scp->fid.cell, scp->fid.volume, flags);
#ifdef AFS_FREELANCE_CLIENT
cm_AFSFidFromFid(&tfid, &scp->fid);
while (1) {
if (!mustCall && cm_HaveCallback(scp)) {
- osi_Log3(afsd_logp, "GetCallback Complete scp 0x%x cell %d vol %d",
+ osi_Log3(afsd_logp, "GetCallback Complete scp 0x%p cell %d vol %d",
scp, scp->fid.cell, scp->fid.volume);
return 0;
}
/* otherwise, we have to make an RPC to get the status */
sflags = CM_SCACHESYNC_FETCHSTATUS | CM_SCACHESYNC_GETCALLBACK;
- cm_SyncOp(scp, NULL, NULL, NULL, 0, sflags);
+ cm_SyncOp(scp, NULL, userp, reqp, 0, sflags);
cm_StartCallbackGrantingCall(scp, &cbr);
sfid = scp->fid;
lock_ReleaseMutex(&scp->mx);
/* now make the RPC */
- osi_Log4(afsd_logp, "CALL FetchStatus scp 0x%x cell %d vol %d uniq %d",
- (long) scp, scp->fid.cell, scp->fid.volume, scp->fid.unique);
+ osi_Log4(afsd_logp, "CALL FetchStatus scp 0x%p vol %u vn %u uniq %u",
+ scp, scp->fid.volume, scp->fid.vnode, scp->fid.unique);
do {
code = cm_Conn(&sfid, userp, reqp, &connp);
if (code)
&cbr, code));
code = cm_MapRPCError(code, reqp);
if (code)
- osi_Log4(afsd_logp, "CALL FetchStatus FAILURE code 0x%x scp 0x%x cell %d vol %d",
- code, (long) scp, scp->fid.cell, scp->fid.volume);
+ osi_Log4(afsd_logp, "CALL FetchStatus FAILURE code 0x%x scp 0x%p vol %u vn %u",
+ code, scp, scp->fid.volume, scp->fid.vnode);
else
- osi_Log4(afsd_logp, "CALL FetchStatus SUCCESS scp 0x%x cell %d vol %d uniq %d",
- (long) scp, scp->fid.cell, scp->fid.volume, scp->fid.unique);
+ osi_Log4(afsd_logp, "CALL FetchStatus SUCCESS scp 0x%p vol %u vn %u uniq %u",
+ scp, scp->fid.volume, scp->fid.vnode, scp->fid.unique);
lock_ObtainMutex(&scp->mx);
if (code == 0) {
/* now check to see if we got an error */
if (code) {
- osi_Log2(afsd_logp, "GetCallback Failed code 0x%x scp 0x%x -->",code, scp);
- osi_Log4(afsd_logp, " cell %d vol %d vn %d uniq %d",
+ osi_Log2(afsd_logp, "GetCallback Failed code 0x%x scp 0x%p -->",code, scp);
+ osi_Log4(afsd_logp, " cell %u vol %u vn %u uniq %u",
scp->fid.cell, scp->fid.volume, scp->fid.vnode, scp->fid.unique);
return code;
}
{
int i;
cm_scache_t *scp;
- unsigned long now;
+ time_t now;
osi_Log0(afsd_logp, "CheckCBExpiration");
cm_HoldSCacheNoLock(scp);
if (scp->cbExpires > 0 && (scp->cbServerp == NULL || now > scp->cbExpires)) {
lock_ReleaseWrite(&cm_scacheLock);
- osi_Log4(afsd_logp, "Callback Expiration Discarding SCache scp 0x%x vol %u vn %u uniq %u",
+ osi_Log4(afsd_logp, "Callback Expiration Discarding SCache scp 0x%p vol %u vn %u uniq %u",
scp, scp->fid.volume, scp->fid.vnode, scp->fid.unique);
lock_ObtainMutex(&scp->mx);
cm_DiscardSCache(scp);