OpenAFS Master Repository branch, master, updated. openafs-devel-1_5_76-2294-g7c5b834
Gerrit Code Review
gerrit@openafs.org
Fri, 6 Apr 2012 08:03:59 -0700 (PDT)
The following commit has been merged in the master branch:
commit 7c5b8346b305911c981620fff70503008e9cf488
Author: Jeffrey Altman <jaltman@your-file-system.com>
Date: Sun Apr 1 01:17:21 2012 -0400
Windows: Add per object per user EACCES caching
If a cache manager is told by a file server that the user does
not have permission to fetch status for an object, the cache
manager must avoid requesting a fetch status a second time for
that object for the same user. Doing so risks triggering the
rx call abort throttling which can have a significant impact on
end user usability of the Explorer Shell and other applications.
The cache manager cannot make a decision on whether or not to
issue an RXAFS_FetchStatus RPC based upon the type of the object
because the type is unknown to the cache manager. A file server
will succeed a FetchStatus request when the parent directory ACL
grants lookup permission if the object in question is the directory
or is a symlink/mountpoint. Only file objects require read/write
permissions to obtain status information.
The rx call abort throttling is broken is many ways and must be
avoided. Call aborts are tracked by call channel and occur whenever
ten call aborts are issued on the same call channel in a row
regardless of the amount of time that has elapsed.
The EACCES cache works by storing EACCES events by the FID and User
for which the event occurred, when it occurred and the FID of the
parent directory. By definition, the parent FID of a volume root
directory is itself.
Entries are removed from the cache under the following circumstances:
1. When the parent FID's callback expires or is replaced.
2. When the parent FID's cm_scache object is recycled.
3. When the user's tokens expire or are replaced.
Entries are not removed when the FID's cm_scache object is recycled.
This patchset also implements correct behavior if the VLF_DFSFILESET
flag is set on a volume.
Change-Id: I69507601f9872c9544e52a1d5e01064fa42efb81
Reviewed-on: http://gerrit.openafs.org/6996
Reviewed-by: Jeffrey Altman <jaltman@secure-endpoints.com>
Tested-by: Jeffrey Altman <jaltman@secure-endpoints.com>
src/WINNT/afsd/NTMakefile | 2 +
src/WINNT/afsd/afsd.h | 1 +
src/WINNT/afsd/afsd_init.c | 3 +
src/WINNT/afsd/cm.h | 1 +
src/WINNT/afsd/cm_access.c | 38 +++--
src/WINNT/afsd/cm_aclent.c | 2 +
src/WINNT/afsd/cm_btree.c | 11 +-
src/WINNT/afsd/cm_callback.c | 5 +
src/WINNT/afsd/cm_daemon.c | 13 ++
src/WINNT/afsd/cm_eacces.c | 294 +++++++++++++++++++++++++++++++++++
src/WINNT/afsd/cm_eacces.h | 89 +++++++++++
src/WINNT/afsd/cm_scache.c | 29 +++-
src/WINNT/afsd/cm_scache.h | 1 -
src/WINNT/afsd/cm_user.c | 8 +-
src/WINNT/afsd/cm_vnodeops.c | 13 ++-
src/WINNT/afsd/cm_vnodeops.h | 1 +
src/WINNT/afsd/smb.c | 6 +-
src/WINNT/afsd/smb3.c | 6 +-
src/WINNT/afsrdr/user/RDRFunction.c | 4 +-
19 files changed, 491 insertions(+), 36 deletions(-)
--
OpenAFS Master Repository