From ccd454443f4bd4f0a7cfb1f32c6933c9dd4d6092 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Fri, 7 Mar 2008 17:31:28 +0000 Subject: [PATCH] DEVEL15-fakestat-access-for-nautilus-20080307 LICENSE IPL10 in order that nautilus' .directory checks can work without stat()ing every damn thing, do what we do for the mac, basically. (cherry picked from commit f637b6292d3723cd2cf672ecaba6f179813ab64b) --- src/afs/VNOPS/afs_vnop_access.c | 11 ++++++++++- src/afs/VNOPS/afs_vnop_lookup.c | 5 +++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/afs/VNOPS/afs_vnop_access.c b/src/afs/VNOPS/afs_vnop_access.c index 5677a097ce..a5cd799145 100644 --- a/src/afs/VNOPS/afs_vnop_access.c +++ b/src/afs/VNOPS/afs_vnop_access.c @@ -209,7 +209,16 @@ afs_access(OSI_VC_DECL(avc), register afs_int32 amode, if ((code = afs_InitReq(&treq, acred))) return code; - code = afs_EvalFakeStat(&avc, &fakestate, &treq); + if (afs_fakestat_enable && avc->mvstat == 1) { + code = afs_TryEvalFakeStat(&avc, &fakestate, &treq); + if (code == 0 && avc->mvstat == 1) { + afs_PutFakeStat(&fakestate); + return 0; + } + } else { + code = afs_EvalFakeStat(&avc, &fakestate, &treq); + } + if (code) { afs_PutFakeStat(&fakestate); return code; diff --git a/src/afs/VNOPS/afs_vnop_lookup.c b/src/afs/VNOPS/afs_vnop_lookup.c index 32f0e88243..59ed1f0cc8 100644 --- a/src/afs/VNOPS/afs_vnop_lookup.c +++ b/src/afs/VNOPS/afs_vnop_lookup.c @@ -1228,6 +1228,11 @@ afs_lookup(OSI_VC_DECL(adp), char *aname, struct vcache **avcp, struct AFS_UCRED ndp->ni_dvp = AFSTOV(adp); #endif /* AFS_OSF_ENV */ + if (afs_fakestat_enable && adp->mvstat == 1) { + if (strcmp(aname, ".directory") == 0) + tryEvalOnly = 1; + } + #if defined(AFS_DARWIN_ENV) /* Workaround for MacOSX Finder, which tries to look for * .DS_Store and Contents under every directory.