The function cm_SyncOp() can cause threads to wait either because there
is a state conflict on the current use of the cm_scache_t object or
a state conflict on the cm_buf_t object. Waiting is always performed
on the cm_scache_t object. However, if the conflict was with the cm_buf_t
object there was no method for waking up the thread when the conflict is
cleared. Now all of the cm_buf_t waiting functions also take a cm_scache_t
and waiting threads are woken if necessary.
cm_scache_t and cm_buf_t objects now have waitCount and waitRequest fields.
The WAITING flag is now cleared by the waking thread who sets waitCount to
zero.
Many improvements to trace logging for these issues.
(cherry picked from commit dfd34687f29ea2c20c5c0438ab4dba11e077f889)
a couple of more locations at which cm_SyncOpDone() either was not
called or was called without holding the scache mutex.
(cherry picked from commit 528c511aabaefcafc01361c8038766ce56fe8e45)
Put the declaration for rxkad_stats back into the stats.h but only
for Windows. We don't want to deal with figuring out all the
dependencies today.
(cherry picked from commit 4c143cf63df724637d765b8ade88a9f5aa97107e)
rxkad_global_stats is being declared twice in the header file each
time with different properties. Remove the one that is not
conditionalized.
(cherry picked from commit ad4634fca26d92c9496dbbd70e7c970c1f84a5ad)
FIXES 18999
allow parallelization of VInitVolumePackage so attaching volumes can be sped up
(cherry picked from commit b9ae6e9547471c4006e4ac00879b3cb9bcefe47b)
FIXES 18944
don't bother dumping what may not be a readable buffer while tracing when using memcache
(cherry picked from commit b56513ffd69bbcd94afb2b1e1509aae63fa438fc)
FIXES 18613
you can end up hanging when you end up with multiple aliases for a single directory (dentry) as a result of @sys or multiple mountpoints.
don't end up with multiple aliases, and avoid the situation
(cherry picked from commit 2995362346abd9691bc8d4ceca57247e1954fb1d)
(1) Replace all calls to getenv() with GetEnvironment(). getenv() does
not read from the real environment but instead from a copy created by
the C RTL.
(2) Add support for preserving Kerberos 5 tickets during the Integrated
Logon process. Now when Integrated Logon is used, the tickets will
be stored into the default ccache within the user session.
(3) Stress testing at MIT uncovered two code paths that could leave
threads in a permanent sleep state under heavy load. Calls to
cm_SyncOpDone were added to plug this hole.
====================
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.
====================
Install afscpcc.exe and register the KFWLogon WinLogon Event Handler
(cherry picked from commit 96472a6b3a71d5d5ef57e2481680920a7e006ffe)
FIXES 19027
After profiling RX for a while, I've found a few more bottlenecks in the
packet handling code. This patch addresses a couple of these issues.
The major change in this patch is a new API to allow bulk packet
alloc/free ops on rx_queue's of packets. Benefits include reduced lock
contention on rx_freePktQ_lock, elimination of a lot of unnecessary cache
line invalidates, and reduced register window thrashing on sparc.
In addition, this patch dedicates one rx_packet per thread to rxi_SendAck,
since that function is in the critical path, and represents a large
percentage of execution time.
(cherry picked from commit d049ca2ae4e7708df028fca739c2a35ccb906bfb)
Move module init/uninit code from module event handler to vfs ops
Use VFS_SET for FreeBSD 6.0
(cherry picked from commit 36957dd203ddb45d993e1ea9ad1ffaeccc3b9390)
Add FreeBSD 6.0.
Consolidate linux kernel header notes in Linux Notes section.
Reformat system types section.
(cherry picked from commit 015c5356d9910688c497f860f70ed277e263239b)
Remove extern time from OBSD/osi_machdep.h. It's in sys/kernel.h.
Suggested by irene.braun@ualberta.ca.
(cherry picked from commit c20d9c0eabb6f6186f21e2f5bd7e125c9a9aee37)
FIXES 18588
when the callback for a directory is broken the children of this vnode
are not invalidated as well. so VerifyVCache() always believes these
vnodes to be up to date since they will still have the CStatd flag.
perhaps breaking the callback on a directory should also clear CStatd
on children vnodes?
this isnt a problem for other operating system which go through the
dnlc which does purge the children entries for the vnode in question
during ClearCallBack().
since d_revalidate now avoids the dnlc (and afs_lookup) the following
patch tracks the parent vnode's DataVersion (just the lower half really
but this should be sufficient) in d_time. if the parent has changed
then the dentry is flagged as neededing updated.
(cherry picked from commit f6883dfbbcbe14f65c2b9e44f2841392050e755f)
On at least one system it was noticed that threads waiting in rx_NewCall
would starve forever (aka deadlock). This was the result of one out of
two problems related to a race condition on the RX_CONN_MAKECALL_WAITING
bit flag. This flag was set once in rx_NewCall and cleared in rx_EndCall.
However, it was possible for the flag to be cleared even though there
were additional flags waiting in rx_NewCall. This was due to a failure
to check the value of makeCallWaiters before clearing the flag and also
due to a failure to properly lock the access to the makeCallWaiters field.
The second problem was an ability to destroy a connection on which threads
are waiting within rx_NewCall.
(cherry picked from commit 10f6e5d6e2960469eb4d0e75f62fa9b33629b132)
FIXES 18391
large (>31bit) volume id handling and fixed handling of cloned volumes
(cherry picked from commit f519e0457caaff9be2926518efffac586202e266)