Please test OpenAFS 1.4.1 RC5

Jeffrey Altman <[email protected]> Tue, 24 Jan 2006 21:38:22 -0500
Newsgroups gmane.comp.file-systems.openafs.devel.win32
Organization Secure Endpoints Inc.
Message-ID <[email protected]>
Folks.  If you read this list it can only be because you care about the
quality of the OpenAFS for Windows releases.  Some point over the next
48 hours, 1.4.1 RC5 is going to be announced.  When it is, please take
the time to download, install and test this build.

Between 1.4.0 and 1.4.1 RC5 there have been a greater number of changes
to the internals than I would like.   The development work leading up to
1.4.0 focused a lot of energy on the thread safety and memory management
of the cache manager code.  After 1.4.0, a significant effort was spent
on cleaning up the SMB Server implementation.  The changes to the code
are not supposed to impact the behavior experienced by the end user
other than to make the application work correctly in more situations.

The re-writing of the SMB Server was triggered by two events:

First, the implementation of the client side byte range locking in the
SMB Server requires that all file handles be closed when the SMB client
unexpectedly disconnects from the SMB server and then reconnects.  This
frequently happens when the SMB client is under heavy load.  Previous to
1.4.1-rc5 the SMB server could not detect that a client had disappeared
and the smb virtual circuit along with all of the associated tree
connections, file handles and user authentications would be preserved
indefinitely.  This caused a problem for the re-connecting client
because when locking is enforced (even if only locally) the user would
be unable to open files that should no longer have been in use.

Second, it was discovered via access to Microsoft Crash Reports for
1.4.0 that there was at least one user laptop that was experiencing
afsd_service.exe panics due to an exhaustion of smb session and/or
smb network control blocks.  The number of Sessions and NCBs are a very
limited resource.  In the reported case, the sessions were being
allocated at a rapid rate and the SMB server did not realize that the
smb virtual circuits which were using the sessions were dead.   It
therefore became imperative that a mechanism for probing the validity of
smb virtual circuits be implemented as a part of 1.4.1.

Once code is added to detect the disconnects, it is necessary for the
server to actually cleanup the smb virtual circuits and associated data
structures.  Doing so requires that the reference counts, read/write
object locks, and mutex objects be managed appropriately in order to
avoid leaks, premature object destruction, and race conditions.

After cleaning up a majority of the reference leaks it was discovered
that actually counting the references correctly resulted in the
Integrated Login code breaking.  It turns out that the only reason that
 it was possible to obtain a token at login and then use it after the
user's logon session was created is because there were reference count
leaks.  Once the leaks were removed, the tokens which were set prior to
the creation of the logon session would immediately be discarded because
they were not being referenced by any logon sessions.

The reference counting was so bad in fact that I believe that the random
reports of users on Terminal Server systems losing their tokens was
caused by reference counts wrapping back to zero.  Windows Terminal
Servers are supposed to have very long up times.  This enabled several
counters to wrap especially given the lack of protection associated with
many of the global smb state variables and object queues.

I have done as much testing as I am capable of via automated testing.
Now I need some heavy users to deploy this code and push it.  Please
report back your findings.

Thanks.

Jeffrey Altman
smime.p7s (application/x-pkcs7-signature, 3.2 KB) - not displayed