From cb395ac70a2387723b0eceb33afe293d2cbfbf71 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Wed, 28 Jun 2006 06:33:28 +0000 Subject: [PATCH] windows-inlinebulkstat-20060628 fix the timeout conditional and error handling so that all directory entries will be processed. now there is a problem in which transitioning from no tokens to tokens does not result in refreshed data. something to look into. --- src/WINNT/afsd/cm_access.c | 2 +- src/WINNT/afsd/cm_conn.h | 1 + src/WINNT/afsd/cm_scache.c | 6 ++++++ src/WINNT/afsd/cm_vnodeops.c | 5 ++++- src/WINNT/afsd/smb.c | 2 +- src/WINNT/afsd/smb3.c | 2 +- 6 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/WINNT/afsd/cm_access.c b/src/WINNT/afsd/cm_access.c index e3097f9be..a40e17e87 100644 --- a/src/WINNT/afsd/cm_access.c +++ b/src/WINNT/afsd/cm_access.c @@ -150,7 +150,7 @@ long cm_GetAccessRights(struct cm_scache *scp, struct cm_user *userp, return code; } - osi_Log1(afsd_logp, "GetAccess parent scp %x user %x", aclScp, userp); + osi_Log2(afsd_logp, "GetAccess parent scp %x user %x", aclScp, userp); lock_ObtainMutex(&aclScp->mx); code = cm_GetCallback(aclScp, userp, reqp, 1); diff --git a/src/WINNT/afsd/cm_conn.h b/src/WINNT/afsd/cm_conn.h index 9d65a69c8..fb4548444 100644 --- a/src/WINNT/afsd/cm_conn.h +++ b/src/WINNT/afsd/cm_conn.h @@ -16,6 +16,7 @@ extern unsigned short ConnDeadtimeout; extern unsigned short HardDeadtimeout; +extern long RDRtimeout; typedef struct cm_conn { struct cm_conn *nextp; /* locked by cm_connLock */ diff --git a/src/WINNT/afsd/cm_scache.c b/src/WINNT/afsd/cm_scache.c index fd34ccd5f..c411d14fe 100644 --- a/src/WINNT/afsd/cm_scache.c +++ b/src/WINNT/afsd/cm_scache.c @@ -1164,9 +1164,15 @@ void cm_MergeStatus(cm_scache_t *scp, AFSFetchStatus *statusp, AFSVolSync *volp, statusp->Group = 0; statusp->SyncCounter = 0; statusp->dataVersionHigh = 0; + statusp->errorCode = 0; } #endif /* AFS_FREELANCE_CLIENT */ + if (statusp->errorCode != 0) { + osi_Log2(afsd_logp, "Merge, Failure scp %x code 0x%x", scp, statusp->errorCode); + return; + } + if (!(flags & CM_MERGEFLAG_FORCE) && statusp->DataVersion < (unsigned long) scp->dataVersion) { struct cm_cell *cellp; diff --git a/src/WINNT/afsd/cm_vnodeops.c b/src/WINNT/afsd/cm_vnodeops.c index 6ede5129c..4af4907c9 100644 --- a/src/WINNT/afsd/cm_vnodeops.c +++ b/src/WINNT/afsd/cm_vnodeops.c @@ -2020,6 +2020,7 @@ cm_TryBulkStat(cm_scache_t *dscp, osi_hyper_t *offsetp, cm_user_t *userp, } /* while there are still more files to process */ lock_ObtainMutex(&dscp->mx); +#if 0 /* If we did the InlineBulk RPC pull out the return code */ if (inlinebulk) { if ((&bb.stats[0])->errorCode) { @@ -2027,7 +2028,9 @@ cm_TryBulkStat(cm_scache_t *dscp, osi_hyper_t *offsetp, cm_user_t *userp, userp, reqp, &dscp->fid, &volSync, NULL, NULL, (&bb.stats[0])->errorCode); code = cm_MapRPCError((&bb.stats[0])->errorCode, reqp); } - } else { + } else +#endif + { code = 0; } diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index 0f76c5643..d62ef7112 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -4230,7 +4230,7 @@ long smb_ReceiveCoreSearchDir(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *ou scp->bulkStatProgress)) { /* Don't bulk stat if risking timeout */ int now = GetTickCount(); - if (now - req.startTime < 5000) { + if (now - req.startTime > RDRtimeout) { scp->bulkStatProgress = thyper; scp->flags &= ~CM_SCACHEFLAG_BULKSTATTING; dsp->flags &= ~SMB_DIRSEARCH_BULKST; diff --git a/src/WINNT/afsd/smb3.c b/src/WINNT/afsd/smb3.c index d6ab708b0..667dad51e 100644 --- a/src/WINNT/afsd/smb3.c +++ b/src/WINNT/afsd/smb3.c @@ -4146,7 +4146,7 @@ long smb_ReceiveTran2SearchDir(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t LargeIntegerGreaterThanOrEqualTo(thyper, scp->bulkStatProgress)) { /* Don't bulk stat if risking timeout */ int now = GetTickCount(); - if (now - req.startTime < 5000) { + if (now - req.startTime > RDRtimeout) { scp->bulkStatProgress = thyper; scp->flags &= ~CM_SCACHEFLAG_BULKSTATTING; dsp->flags &= ~SMB_DIRSEARCH_BULKST; -- 2.39.5