Mark afs_config.exe via a manifest with
requestedExecutionLevel = HighestAvailable
This will ensure that when Vista UAC is active, that a member of the
Administrators group must run the AFS Control Panel with Administrators
privileges.
When a file name does not conform to 8.3 notation, an 8.3 notation
alias is generated for it. This short name form must be searchable
in the B+ tree.
This commit adds a longname field to the data node which is used both
to identify the real name associated with the short name as well as
whether or not the short name is in fact an alias. Being able to
determine whether or not a data node is an alias will be important
when we support using the B+ tree for directory enumeration.
For insertion, if the name does not conform to 8.3 notation, a second
entry is inserted into the B+ tree using the shortname as the key and
the longname stored in the data.
For deletion, we lookup the data node for the provided key. If there
is a longname we remove the longname entry first and then the shortname
entry. If the key is a longname, we lookup the data node so we can
acquire the FID and then use that to compute the shortname. We then
remove both the shortname and longname entries from the B+ tree.
don't hold the cm_scache_t mutex across calls to cm_GetCell() since
cm_GetCell() can block in an RPC call. If that cm_scache_t must be
accessed to revoke a callback, it can result in a deadlock.
This code defines a new service parameter "PrefetchExecutableExtensions"
of type REG_MULTI_SZ. By default it is undefined and does nothing. If
it is defined, files that match the extensions will be prefetched in
their entirety.
All of the prefetch functions now pay attention to the length parameters.
Previously, length parameters were specified on some functions in the
chain but they were ignored. The reality was that the chunksize was
used regardless of what was indicated.
Prefetching is still optional. If the prefetch fails during the initial
attempt you lose. Otherwise, as many buffers as are required to satisfy
the requested prefetch length will be requested from the file server in
chunksize units. If buffers have already been acquired, they are skipped
during the prefetch operation.
when suspending only clear callbacks for servers that are in an up state.
if they were in a down state, then we couldn't send the clear callbacks
message but more importantly, we need to leave the callback info current
because the callbacks should not be cleared until the server is once again
reachable.
Do not attempt to obtain a write lock on a directory
if we already know that we aren't going to perform any
local directory updates.
Add the CM_ERROR_BPLUS_NOMATCH error which has the same
meaning as CM_ERROR_NOSUCHFILE except that it indicates
that we came to that conclusion as the result of a bplus
search. This provides us the ability to short circuit
additional directory searches since we know the answer
is final.
Disable the use of krb524, leash, and ms2mit (because it depends on leash)
for 64-bit builds. We will need to implement our own replacement for the
ms2mit functionality.
make the afs network identity provider compatible with FILE:
credential caches. this is mostly of importance to 64-bit
Windows users since there is no CCAPI implementation for
64-bit KFW.
Windows uses case-insensitive file name pattern matching
but AFS is a case sensitive file system. The AFS3 directory
format is block based, uses network byte order and
includes a hash table for fast case sensitive lookups.
This causes several problems for the Windows AFS client.
(1) Traversing the directory blocks is cpu expensive
(2) A hash table miss does not indicate that the desired
entry does not exist.
(3) Determining whether a non-ambiguous inexact match or
the entry does not exist requires a linear traversal
of the entire directory.
These issues often result in 100% CPU utilization.
These issues are addressed by building a modified B+ tree for
each directory and then using the B+ tree for searches.
Further improvements can be made by using the B+ tree leaf
nodes for directory enumeration.
for . and .. find the last time we saw the fid in the list
instead of moving back a fixed count since the parent might
be a symlink or a mount point or both