In s10u2 the vnode path cache code was modified so that we're no longer
guaranteed of having a valid path cache pointer for the lofs mount case.
Attached patch changes gafs_rename to deal with this. Patch also removes
unnecessary MODLOAD32 build rule from sun4x_510 case.
* do not attempt to copy kfw krb5 creds if integrated logon disabled
* disable use of automatic registration from afslogon.dll. calling
pr_Initialize() results in rx_Init() being called which creates
threads that prevent safe unloading of the dll. This is causing
crashes in third party applications that call CreateProcessAsUser()
which in turn temporarily loads afslogon.dll.
* add life_to_time to afskfw.c in order remove the link to the rxkad
and des libraries
However, in bucoord/commands.c, bc_VolRestoreCmd(), bc_DiskRestoreCmd(),
bc_VolsetRestoreCmd(), and bc_DumpCmd() were passing '0' as arguments
instead of NULL. Because there is no prototype for bc_StartDmpRst() this
results in a crash on 64-bit Linux. (when running 'volrestore' from an
interactive backup session)
The use of strncmp() results in p->v5_str being treated as matching
prefix instead of as the complete string. This causes "ftpa" to be
considered a match for "ftp".
overquota and diskfull errors are detected while writing dirty buffers
to the file server. A flag is set on the scp so that the error can
be returned to the caller. cm_FSync was clearing the flag without
returning the error. This permitted calls to Win32 WriteFile to report
success even when they failed.
Check for krb524 functions in libkrb524 if not found in libkrb5 so that the
Kerberos v5 support will build on RHEL3. Thanks to Derek Atkins for the
debugging and testing.
When Freelance mode is not in use the cache manager must load the root.afs
volume of the default cell in order to be able to start. Unfortunately,
if the first vlserver fails the request to obtain the volume information
will timeout and no retries will be performed. This patch performs up
to 10 retries in the initialization code in order to enable the vlservers
to be marked down so that failover can occur.
"the non AFS_GLOBAL_RXLOCK_KERNEL version of
rxi_ReceiveAckPacket() wasnt counting 'hard' acks and not opening the
congestion window. using rx_Readv() directs the incoming packets into
the target iov, and sends a hard ack (skipping soft acks). "
A deadlock was detected when performing "fs flushall" if the file
server reports VNOVNODE. The scp->createBufferLock is already
held by the current thread and there is no mechanism to propagate
the knowledge. Therefore, an alternate mechanism for clearing the
cache must be developed. A new function cm_RecycleSCache(scp,flags)
has been extracted from cm_GetNewSCache(). This function performs
the task of recycling an cm_scache_t object. When called from
cm_GetNewSCache() with no flags the expectation is that there are
no associated buffers that are queued to be read or written. When
called from cm_Analyze() with the CM_SCACHE_RECYCLEFLAG_DESTROY_BUFFERS
flag, any queued buffers will be de-queued and marked as if the operations
were performed so the data can be discarded.
This patch also addresses the following issues:
* CM_ERROR codes were logged as "unknown" by cm_Analyze.
* In response to VNOVNODE, the parent is only discarded if the current
cm_scache_t is not a directory.
* In the Ioctl FlushFile and FlushVolume functions, there were no
checks to protect against flushing the Freelance SCache entries.
* In FlushFile, the wrong cm_scache_t object was being released.
* In cm_GetNewSCache, do not allow Freelance SCache entries to be
recycled. Choose a new entry if cm_RecycleSCache fails.
It is possible to have a valid callback but not to have the
required ACL info for the current user. Force acquisition of
a FetchStatus but do so without making multiple calls.
Dynamically adjust the priority of server threads based upon the age
of the cifs request that is being processed. Bump the priority one
level for each 15 seconds of age.
while investigating the cause of the delayed write errors it was observed
that all of the sleep queues are LIFO. This has the side effect of
encouraging starvation. Changing the queues to FIFOs revealed a serious
problem affecting the use of all queues which use both head and tail
pointers. The removal function osi_QRemove does not take a tail pointer
and therefore the pointer is always left hanging. If the number of elements
ever drops to zero the queue becomes corrupted.
Added osi_QRemoveHT to be used whenever head and tail pointers are used.
Updated all callers in afsd.
====================
This delta was composed from multiple commits as part of the CVS->Git migration.
The checkin message with each commit was inconsistent.
The following are the additional commit messages.
====================
Do not delete an old host entry because the UUID because the UUIDs
of the clients at the old addresses are wrong. Remove the addresses.
Do not allow the same host,addr,port combination to be added into
the hash table multiple times.
====================
This delta was composed from multiple commits as part of the CVS->Git migration.
The checkin message with each commit was inconsistent.
The following are the additional commit messages.
====================
Add some more logging
Do not allow 'code' to be re-used for probing the uuid of the old host
primary address because we are relying on the value of 'code' to indicate
whether or not RCallBackConnectBack failed. If it did, we mark the
client as VENUSDOWN, if not we marked it as RESETDONE.
The old StoreData RPC is only supposed to be valid for files
smaller than 2GB. When StoreData64 was added, StoreData and StoreData64
were implemented as calls to common_StoreData64. This removed the bounds
checking on the old StoreData RPC making it possible for operations
beyond two 2GB to be requested even if the file server cannot support
them. This patch adds a validity check to ensure that the requested
file operations remain below 2GB. Failures return E2BIG.
A number of crash reports have been filed with Microsoft in afspthread.dll.
The crashes are occuring as the processes are terminating. In order to
attempt to address this problem this patch adds support for a DllMain()
entry point that is used to cleanup Thread Local Storage and the various
RX queues. One theory is that processes are loading and unloading DLLs
that are linked to afspthread.dll leaving the pthread data in a very
inconsistent state after each unload. By cleaning up the static data
during the unload, if afspthread is loading again it will be forced to
initialize the data once again.
This patch adds code to perform return code error checking for all calls
to the ReadXyz() routines. If the rx connection was lost or if the dump
format being parsed was incorrect there was an opportunity for data to
the processed after an error had already been detected. In the best case
this would have simply resulted in additional work being performed when
it was not necessary but there was also the potential for modifying return
values which would later be used as input to later operations. Better
to simply catch the error when it initially occurs and be done with it.
The ReadString() function had the potential to write into one byte prior
to the start of the input array.
ProcessIndex() would not properly close Fdhandle nor the StreamHandle
if an error was detected.
RestoreVolume() had a problem with the processing of incremental dumps.
Originally AFS supported a concept of incrementals dumps which when
restored would simply add their contents to the existing volume. One
of the distinctions between the incremental and full dumps is that full
dump processing is responsible for removing any vnode entries from the
volume that are not present in the dump file headers. When the incremental
dump support was removed, the RestoreVolume() function was broken. If
a dump file contains multiple Dump Headers, then only the vnode entries
in the first Dump Header would be marked as being restored. Any vnode
entries restored from subsequent Dump Headers would be deleted when the
RestoreVolume() function reached the end. By removing the assignment
of 'tdelo = -1' within the loop that processes the Dump Headers, this
bug is resolved. Although RestoreVolume is only called with the
'incremental' parameter == 0 at the current time, the check for non-zero
values is restored and the "remove unrestored vnodes" functionality is
disabled when a non-zero value is provided.
The ReadVnodes() function did not perform error checking.