From: Derrick Brashear Date: Thu, 4 Feb 2010 00:01:28 +0000 (-0500) Subject: fakestat should preclude afsdb lookups too X-Git-Tag: openafs-devel-1_5_72~45 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=682db4d64d550af86dc5a09786e050c6a98ffb0c;p=packages%2Fo%2Fopenafs.git fakestat should preclude afsdb lookups too macos tries to look up ._foo stuff. correctly identify those (mvstat 2, not 1) and also use tryEvalOnly to preclude AFSDB lookups Change-Id: I490fe98d695c4d230210bc4e4645ea20cd4d8fa2 Reviewed-on: http://gerrit.openafs.org/1228 Reviewed-by: Simon Wilkinson Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- diff --git a/src/afs/VNOPS/afs_vnop_lookup.c b/src/afs/VNOPS/afs_vnop_lookup.c index a506960bc..a47a03432 100644 --- a/src/afs/VNOPS/afs_vnop_lookup.c +++ b/src/afs/VNOPS/afs_vnop_lookup.c @@ -74,7 +74,7 @@ EvalMountData(char type, char *data, afs_uint32 states, afs_uint32 cellnum, tcell = afs_GetCell(cellnum, READ_LOCK); else { tcell = afs_GetCellByName(data, READ_LOCK); - cellnum = 0; + cellnum = 0; } *cpos = ':'; } else if (cellnum) { @@ -1243,6 +1243,8 @@ afs_lookup(OSI_VC_DECL(adp), char *aname, struct vcache **avcp, afs_ucred_t *acr tryEvalOnly = 1; if (strcmp(aname, "Contents") == 0) tryEvalOnly = 1; + } + if (afs_fakestat_enable && adp->mvstat == 2) { if (strncmp(aname, "._", 2) == 0) tryEvalOnly = 1; } @@ -1514,8 +1516,7 @@ afs_lookup(OSI_VC_DECL(adp), char *aname, struct vcache **avcp, afs_ucred_t *acr ReleaseReadLock(&tdc->lock); if (!afs_InReadDir(adp)) afs_PutDCache(tdc); - - if (code == ENOENT && afs_IsDynroot(adp) && dynrootRetry) { + if (code == ENOENT && afs_IsDynroot(adp) && dynrootRetry && !tryEvalOnly) { ReleaseReadLock(&adp->lock); dynrootRetry = 0; if (tname[0] == '.') @@ -1538,7 +1539,7 @@ afs_lookup(OSI_VC_DECL(adp), char *aname, struct vcache **avcp, afs_ucred_t *acr if (code) { if (code != ENOENT) { - printf("LOOKUP dirLookupOff -> %d\n", code); + /*printf("LOOKUP dirLookupOff -> %d\n", code);*/ } goto done; } @@ -1723,7 +1724,6 @@ afs_lookup(OSI_VC_DECL(adp), char *aname, struct vcache **avcp, afs_ucred_t *acr } code = ENOENT; } else { - printf("Network down in afs_lookup\n"); code = ENETDOWN; } }