2. Add a 'hash' value to the cm_fid_t structure in order to speed up cm_FidCmp().
Add cm_SetFid() for use in constructing a fid complete with the hash.
3. Redefine the BUF_HASH and BUF_FILEHASH in terms of the cm_fid_t hash which
has a better distribution
4. Modify cm_ConsiderPrefetch to evaluate the amount of data in the most recent
read request instead of the next chunkSize. cm_chunkSize can be dozens or
hundreds of buffers. As a result too much time is spent performing the
evaluation.
5. Fix the usage of cm_scache_t bufCreateLock. The purpose of this lock is
to prevent the creation of new buffers while a truncation is being performed.
All references to bufCreateLock have been removed except in two places:
i. a write-lock surrounding the function that calls buf_Truncate()
ii. a read-lock within buf_GetNewLocked() that actually allocates new
buffers
6. Modify the CM_CONFIG_DATA_MAGIC value to include a CM_CONFIG_DATA_VERSION
number which value be used to force the replacement of the cache file
contents when incompatible changes are made between releases.
7. CM_SCACHESYNC_ASYNCSTORE should not be ordered by cm_SyncOpCheckContinue
8. Avoid calls to multi_Rx if nconns == 0
9. Modify smb_WriteData to perform background writes based upon the crossing
of buf_blockSize boundaries instead of cm_chunkSize boundaries. This will
slow down writes from the SMB interface but will avoid the risk of
the CIFS client disconnecting from the AFS client SMB server.
Add RxEnableHotThread registry option to permit rx_enable_hot_thread
to be set. The default is off for the moment but turning it on does
provide significant performance benefits.
my code, though, this is a result of a problem reported by Chaskiel Grundman and analysis by him, Jeff Altman and myself.
I'm just checking in my implementation. In any case, the issue this addresses
is one where we can end up in makecall_waiting in rx on multiple connections
when we multibreakcallback because the lists are sorted differently and each has "pending" calls on a different connection. by sorting by index we will not
block on another caller while also holding what they're after
The RXKADBADTICKET error is returned when a krb5 derived token is sent
to a server that does not support them. In a mixed cell it is possible
that some servers were not updated. Discarding the token does not make
it possible to perform the request successfully and adversely affects
the user experience because those servers that do support the token
can no longer be accessed in an authenticated manner. Users can't
determine what the cause is, all they see are their tokens disappearing
and there is nothing they can do about it anyway.
From now on return STATUS_NO_KERB_KEY and do not retry.
Upon receiving a VNOVNODE error from a file server, be sure to
invalidate any file locks. This prevents on-going attempts to
extend the locks and will cause subsequent attempts to access
the file to receive a invalid handle error.
Treat srvsvc, wkssvc and ipc$ as pseudo files. Permit them to be opened
and closed without actually existing. For now we treat them as equivalent
to ioctls but this should eventually change.
Fix RAP processing to not reject names that exist in the root.afs volume
for GetInfo queries.
Add "ipc$" to the list of names that must not be automatically added
as a share name.
If the sharename is a partial match and therefore will not be added
automatically to the share list, make sure that we return an error
to the requestor.
Warnings as errors are nice, but when different compiler versions
stop building simply because a parameter is not being referenced
in a meaningful way its time for the option to be turned off
Remove all references to rpcns4.lib and its included functions RpcNsXXX.
These APIs are no longer supported on Vista. Except for TaAfsAdmSvr
they had been commented out for a long time but we still continued to
link to the library. Loading the library generates a no longer supported
error on Vista. So lets get rid of it.
Do not return BAD_NETWORK_ERROR in response to attempts to create directories
or files in the Freelance root.afs volume. Instead return ACCESS_DENIED.
BAD_NETWORK_ERROR was being sent because the Freelance cell has no
vldb servers. Short circuit the error by testing for freelance
in CreateFile and MakeDir
Enable the 32-bit tools that are distributed for use in the WOW64 environment
to access the 64-bit registry keys instead of the 32-bit versions. This
will remove the need to support both 64-bit and 32-bit versions of the
values.
Do not attempt to add a mount point for share names of the form
<cell><mount-type><volume>. Its just a big waste of time. DNS
queries and CellServDB file searches are expensive.
VNOVOL means the volume could not be attached which from the client
perspective is the same as being offline. The VLDB should not be
queried in response to this error.
Do not translate the character set of the pioctl path data.
These paths were not provided by the file system but by the end user.
Therefore, they were not converted to the OEM character set.
With this change the AFS shell context menu will be displayed for
non-ASCII file names when ANSI file names are being used as well
as the fs commands will work.
Instead of probing servers one at a time, use multi_rx versions of
RXAFS_GetCapabilities, RXAFS_GetTime and VL_ProbeServer to permit
simultaneous probing of servers in constant time regardless of the
number of servers.
When 'multi' is applied to an RPC definition, rxgen produced split prototypes,
Start and End, but failed to produce the prototype for the normal RPC call.
* Vnode package concurrency model was overhauled. Unlike the old model,
where concurrency was controlled via reader/writer locks, the new model
uses a per-vnode finite state automata.
* add several new volume states to deal with volume vnode list operations
* a new FSSYNC command code was added to allow volume utilities to close
out a volume operation without causing the fileserver to mount the volume
* a new FSSYNC command code was added to allow volume utilities to
transition a volume into a hard error state
* the salvageserver has been modified to keep volume group partition
path data coherent with the fileserver (like many other parts of the
volume package, this code assumes all members of the group are stored on
the same vice partition)
* make salvageserver correctly handle volume state when a child worker
process terminates abnormally
* update volume pre-attachment code to deal with move volumes across
partitions on the same server
* add volume state sanity checks to more volume package interfaces
* original vos online patch introduced a race condition; rearchitect vos
online/offline to eliminate race condition, and reduce i/o load caused
by operation
* unify duplicate code in volserver related to servicing vos examine and
vos listvol requests
* add doxygen formatted comment blocks to numerous volume package elements
* various updates to fssync-debug to allow dumping vnode state, and
updates to deal with added volume and vnode states
* several 1.5-specific fixes related to fssync and salvsync
Modify the search order for determining the location of CellServDB
and other client configuration files.
1. AFSCONF environment variable
2. registry setting
3. NEW - use All Users\AppData\OpenAFS\Client only if CellServDB exists
4. use Program Files\OpenAFS\Client
Merge cellconfig.c and the afsreg library.
Redefine the location of the client cellservdb directory in dirpath
in terms of the cellservdb direction and not the install directory.
(although they point at the same thing now by default.)
Future changes to the location of the cellservdb directory should
be made in afsreg.
modify cellservdb.c to use cm_GetCellServDB() from libafsconf.dll.
This results in both libadmin and the afs client control panel using
the same CellServDB as the rest of the system.
cm_config.c was a nightmare. there were several functions that each
computed the location of the OpenAFS Client configuration directory
in a slightly different way. Now there is a single exported function
that determines the directory, and another that determines the name
of the CellServDB file. All of the other functons in cm_config.c and
throughout the src/WINNT/afsd directory now use those two functions.
The new rule for determining the location of the OpenAFS Client
configuration directory and hence the CellServDB file location is:
1. check the AFSCONF environment variable
2. check the HKLM\SOFTWARE\OpenAFS\Client CellServDBDir registry value
3. use AFSDIR_CLIENT_ETC_DIRPATH which currently refers to
\Program Files\OpenAFS\Client
The algorithms that were used to produce a Netbios name were broken.
The name that was produced when the hostname was too long was in fact
longer than the maximum permitted netbios name.
Also, the "NetbiosName" value was not used as a suffix when the loopback
adapter was not installed. The hardcoded string "AFS" was used instead.
Cell names are published as share names. As a result they are searched
for as part of the Dfs Referral evaluation. If share "foo" can not be
reached, the CIFS client will fallback to searching for "fo" as well.
Since the freelance client automatically adds a symlink for prefixes
of the cell name, this results in both "foo" and "fo" being added to
the freelance root.afs volume. This patch prevents that negative side
effect.
There are circumstances where a volume object is being accessed and the
volume is marked indicating that the volume location information is out
of date but where it is also pointless and perhaps dangerous to block
waiting for the rpc to complete. One example is when processing the
cmdebug requests. If we know that we are not going to use the volume
object to contact a server, then we can now set the CM_GETVOL_FLAG_NO_RESET
flag.
when moving up in the directory tree we search the recorded fid list to
find a matching fid that we have already crossed. we must also reset
the fid count based upon what we discover.