afs_int32 afs_bulkStatsDone;
static int bulkStatCounter = 0; /* counter for bulk stat seq. numbers */
-int afs_fakestat_enable = 0;
+int afs_fakestat_enable = 0; /* 1: fakestat-all, 2: fakestat-crosscell */
/* this would be faster if it did comparison as int32word, but would be
int afs_ENameOK(register char *aname)
{
- register char tc;
register int tlen;
AFS_STATCNT(ENameOK);
} else
return 0; /* .*@sys doesn't match either */
} else if (++(state->index) >= afs_sysnamecount
- || !afs_sysnamelist[state->index])
+ || !afs_sysnamelist[(int)state->index])
return 0; /* end of list */
- strcpy(state->name+state->offset, afs_sysnamelist[state->index]);
+ strcpy(state->name+state->offset, afs_sysnamelist[(int)state->index]);
return 1;
}
struct conn *tcp; /* conn for call */
AFSCBs cbParm; /* callback parm for bulk stat */
struct server *hostp = 0; /* host we got callback from */
- long origEvenCBs; /* original # of callbacks for even-fid files */
- long origOddCBs; /* original # of callbacks for odd-fid files */
- long origEvenZaps; /* original # of recycles for even-fid files */
- long origOddZaps; /* original # of recycles for odd-fid files */
long startTime; /* time we started the call,
* for callback expiration base
*/
} /* sub-block just to reduce stack usage */
if (tvc) {
- if (adp->states & CForeign)
+ int force_eval = afs_fakestat_enable ? 0 : 1;
+
+ if (adp->states & CForeign)
tvc->states |= CForeign;
tvc->parentVnode = adp->fid.Fid.Vnode;
tvc->parentUnique = adp->fid.Fid.Unique;
tvc->states &= ~CBulkStat;
+ if (afs_fakestat_enable == 2 && tvc->mvstat == 1) {
+ ObtainSharedLock(&tvc->lock, 680);
+ if (!tvc->linkData) {
+ UpgradeSToWLock(&tvc->lock, 681);
+ code = afs_HandleLink(tvc, &treq);
+ ConvertWToRLock(&tvc->lock);
+ } else {
+ ConvertSToRLock(&tvc->lock);
+ code = 0;
+ }
+ if (!code && !strchr(tvc->linkData, ':'))
+ force_eval = 1;
+ ReleaseReadLock(&tvc->lock);
+ }
+
#if defined(UKERNEL) && defined(AFS_WEB_ENHANCEMENTS)
if (!(flags & AFS_LOOKUP_NOEVAL))
/* don't eval mount points */
#endif /* UKERNEL && AFS_WEB_ENHANCEMENTS */
- if (!afs_fakestat_enable && tvc->mvstat == 1) {
+ if (tvc->mvstat == 1 && force_eval) {
/* a mt point, possibly unevaluated */
struct volume *tvolp;