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.
add option to addsite to allow adding a site where there is already a release-
equivalent volume resident, where thus we don't want to mark unreleased
(possible by dumping an existing RO and restoring with -readonly at the
new site)
add ability to vos clone to a readonly or backup with the correct ID and name
add ability when restoring a RW to a new site to leave the volume at the old
site intact
all changes are internal to vos and can be used with any OpenAFS from 2006
or later (supporting changes in namei to not create volumes with bad parent
id went in in December 2005)
(1) the specified path for "fs examine, whereis, whichcell, flush" and so
always has the follow symlinks and mount points semantics. This makes
it impossible to determine what the FID of a symlink or mount point is.
(2) "fs examine" out is not the result of a single pioctl operation but is
actually the combined output of half a dozen operations. Path evaluation
is an expensive operation. It would be faster if the caller could
evaluate the FID first and then perform all of the rest of the operations
by specifying the FID instead of the path.
(3) fs output reports all objects as files. By adding a GetFileType
pioctl more informative output can be provided that indicates what
type of object the path evaluates to.
(4) the Windows fs command includes a number of commands that do nothing
but exist only because the Unix cache manager supports them.
This delta adds a new extendible data structure cm_ioctl_query_opts_t which
can be optionally specified with pioctls that do not already require
input data. The first two fields of this structure are 'literal' and
'fid'. The literal field is used to indicate whether the last component
of the path should be evaluated following symlinks and mount points.
The fid field permits a fid to be specified.
A new GetFileType pioctl has been added. The type of objects are now
output.
A new "-literal" option is available for "fs examine, flush, whereis, and
whichcell.
Nname() is used to concatenate two strings and is frequently used with
the first string being the name of the executable perhaps with a full
path. The static buffer specified is too small for a full path and
there was no protection against writing beyond the end of it.
This option will retrieve the volume location database information
for all cells known to the cache manager and output the data in the
format required by the CellServDB file.
This functionality is supported by the UNIX cache managers and
Windows cache managers 1.5.31 and later.
Add support for RXAFS_GetCellServDB. Implemented by generalizing
RXAFS_GetCellByNum and special casing the index values to do the
right thing.
Conditionalize grabbing the callp->lock in the callback functions.
The race conditions in rx have long since been fixed and the potential
for deadlocks are too great.
Add a new flag CM_FLAG_NOPROBE for use in calls to cm_GetCell. When
set the newly discovered servers will not be immediately probed. Useful
when setting tokens, setting server preferences, or responding to cmdebug
callbacks.
1. prevent stopping the smb_Listeners due to an ip addr change when the
LANA is determined either by registry assignment or loopback detection
2. add synchronization logic to prevent smb_Listener restarts prior to
smb_Listener thread stoppage
3. no longer permit panics from smb_Listener threads
4. move the probe logic from cm_IPAddrDaemon thread to the cm_Daemon
thread in order to avoid the loss of ip addr change events. If an
adapter stops and restarts fast enough there might not be anything
for us to do.
Add a registry value "PioctlFollowMountPoint" to permit the use of the
old pioctl path evaluation behavior that always followed mountpoints
and symlinks.
One of the challenges to deploying NIM has been the configuration of
AFS token acquisition. This patch adds a new registry key hierarchy
HKLM\SOFTWARE\OpenAFS\Client\Realms
which is used to configure the AFS Provider for a new identity based
upon the realm of the identity. The Realms key contains subkeys for
each realm for which configuration data is being provided
HKLM\SOFTWARE\OpenAFS\Client\Realms\"RealmName"
"RealmName" contains one optional value, "AFSEnabled", and subkeys for
each Cell that is to be added to the configuration. "AFSEnabled" defaults
to 0x01.
In "CellName", there are two optional values, "Realm" and "MethodName".
If the values are not specified, the automatic realm and method determination
algorithms are used.
These values can be added to an MSI transform or deployed via Group Policy.
Do not pass strings generated from incoming network data to ??printf
as the format string. Instead use a format string of "%s". This protects
against %? expansions being inserted in the string.
After a network change, test to see if the desired LAN adapter to bind
the Netbios Name to has changed. If so, stop the Netbios Network and
restart with the new LAN adapter.
This can happen on Vista after a suspend if the service wakes up before
the Loopback adapter re-initializes.
If the realm name of the requested ticket is the empty string, decode
the actual service ticket to determine the actual realm. Obtaining the
actual realm prevents unnecessary pts registration failures.