OpenAFS Master Repository branch, openafs-devel-1_7_x, updated. openafs-devel-1_7_8-38-g658f17d

Gerrit Code Review
Fri, 6 Apr 2012 14:31:58 -0700 (PDT)

The following commit has been merged in the openafs-devel-1_7_x branch:
commit 658f17df92286ee830df675311f8842846ff0882
Author: Jeffrey Altman <>
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.
    Reviewed-by: Jeffrey Altman <>
    Tested-by: Jeffrey Altman <>
    (cherry picked from commit 7c5b8346b305911c981620fff70503008e9cf488)
    Change-Id: Iaba693d2c3d8e4e8734dc600ade7f886211d9ebc
    Tested-by: BuildBot <>
    Reviewed-by: Jeffrey Altman <>
    Tested-by: Jeffrey Altman <>

 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