fakestat-access-for-nautilus-20080307
authorSimon Wilkinson <sxw@inf.ed.ac.uk>
Fri, 7 Mar 2008 17:30:19 +0000 (17:30 +0000)
committerDerrick Brashear <shadow@dementia.org>
Fri, 7 Mar 2008 17:30:19 +0000 (17:30 +0000)
LICENSE IPL10

in order that nautilus' .directory checks can work without stat()ing every damn
thing, do what we do for the mac, basically.

src/afs/VNOPS/afs_vnop_access.c
src/afs/VNOPS/afs_vnop_lookup.c

index 5677a09..a5cd799 100644 (file)
@@ -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;
index 32f0e88..59ed1f0 100644 (file)
@@ -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.