+Since 1.5.77
+ * Reimplement FetchData and StoreData operations to make
+ use of rx_Writev and rx_Readv which is faster than than
+ multiple calls to rx_Write and rx_Read. Throughput
+ improvements of up to 20% are possible.
+
+ * Many improvements to the rx rpc stack:
+
+ - RTT measurements
+
+ - Fast recovery is not triggered by packet resend timeouts
+
+ - Socket errors are now detected and reported
+
+ - avoid repetitive memory allocations
+
+ - avoid calling gettimeofday() for every packet
+
+ - reduced dependency on the call->lock
+
+ - When a call receive is completed, ack all of the packets
+ immediately. Do not wait for the first response packet
+ to be sent.
+
+ - Do not hold the call->lock during rx_Write* and rx_Read*
+ operations when the call fields in use can only be accessed
+ by the application thread.
+
+ - Reduce the default window size from 128 back to 32 because
+ the current overhead from walking packet queues in the rx
+ listener thread significantly hampers the ability to
+ process incoming packets from the network.
+
+ - Only backoff the peer timeout once for a series of naks.
+
+ - Release builds are lean and mean. All debugging and
+ packet tracking code is disabled.
+
+ * Version number is logged to the Windows Application Event
+ Log as part of the start pending message.
+
+ * MSI installers now backup and restore configuration
+ data during upgrades.
+
+ * Rx pmtu discovery has been disabled by default. Use
+ HKLM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters
+ RxPMTUDiscovery "DWORD"
+ value to re-activate.
+
+ * cm_BkgDaemon event evaluation has been optimized to avoid
+ unnecessary overhead.
+
+ * If a volume is known to be readonly, then locally fail any
+ change request without sending it to the file server. This
+ avoids triggering the file server's abort threshold.
+
+ * Do not leak cm_volume_t objects from the volume LRU queue.
+
+ * Ensure that cm_NameI errors are acted upon promptly.
+ There are many cases in the SMB server where an error from cm_NameI()
+ was either ignored or not acted upon until several other operations
+ are performed that could result in the same error being repeated.
+ This is a mistake which did not have negative side effects until
+ additional checks for callback status were added recently.
+
+ At present, if a CM_ERROR_ACCESS error is returned and ignored,
+ subsequent attempts to operate on the same cm_scache_t will result
+ in additional queries to the file server that will also end in an
+ abort response. This can trigger the file server to delay responses
+ to the client.
+
+ * Fix fs mount point and symlink create operations which were
+ failing due to improper directory separator termination.
+
+ * RXAFS_GetVolumeStatus can return VNOVOL, VMOVED, etc. In
+ order to process them and update volume state a fid must
+ be passed to cm_Analyze(). Use the volume root fid.
+
+ * Negative caching for volume lookups that fail with either
+ VL_NOENT or VL_BADNAME. The expiration time is five minutes.
+ This prevents volume lookup storms.
+
+ * Provide each volume lookup its own two hour lifetime instead
+ of reseting all volume location information every two hours.
+ This prevents the first smb path evaluation after the volume
+ location data has been discarded from potentially causing an
+ smb client timeout.
+
+Since 1.5.76
+ * When the SYSTEM account is in use, the SMB connection is
+ not always established as S-1-5-18. Sometimes it uses an
+ anonymous, S-1-5-7, connection. In both cases the SMB
+ authentication name is the nul string. To better identify
+ when an SMB connection is local system, the smb_username_t
+ is now stored as a SID instead of a user name. When a SID
+ is used, a new flag bit is set SMB_USERNAMEFLAG_SID.
+
+ In smb_SetToken if AFS_PIOCTL_AFSLOGON is set and the user
+ connection is not SYSTEM, the RPC SID is checked. If RPC
+ SID is SYSTEM, that supercedes the SMB authentication.
+
+ * Replace STATUS_IO_TIMEOUT with RPC_NT_SERVER_TOO_BUSY for
+ CM_ERROR_ALLBUSY.
+
+ * Replace STATUS_PATH_NOT_FOUND with RPC_NT_SERVER_UNAVAILABLE
+ for CM_ERROR_ALLOFFLINE and CM_ERROR_ALLBUSY.
+
+ * Optimize behavior of buf_CleanAsyncLocked(). Avoid searching
+ for the cm_scache_t object by FID if it is already known.
+
+ * If the readonly file attribute is set (stored as a unix mode)
+ then a CreateFile operation should fail if the file is opened
+ for DELETE in combination with any other privilege.
+
+ * If the directory buffer contents are garbage we can crash
+ the service. Add some simple validation checks to ensure
+ that cm_dirEntry_t objects have the correct flag value and
+ that the name strings are not too long.
+
+ * If the bulkStat errorCode indicates that a particular object
+ is inaccessible due to a VIO error, we must update the server
+ status appropriately in order to permit failover.
+
+ * An RX_MSGSIZE error is returned by the new PMTU detection
+ code. It is critical that such an error result in a retry of
+ the operation that failed. Otherwise, the PMTU detection can't
+ work and the server will be marked down.
+ Secondly, it is important that such errors not leak to the
+ application layer. Map them to CM_ERROR_RETRY in all cases.
+
+ * Translate RX_RESTARTING to the same cache manager error code
+ for all RPC classes.
+
+ * When logging server volume instance errors to the windows
+ application event log, be sure to log the cell as well.
+ Translating from server ip address is non-trivial. Make it
+ easier for administrators triaging issues to plug the volume
+ and cell info into vos commands.
+
+ * Since unix mode bits are represented in octal in most cases
+ make sure we log them that way.
+
+ * The cm_enforceTrailingDot() function failed if there was a
+ trailing dot followed by white space.
+
+ * Rx: Do not send RX_MSGSIZE if the PMTU size did not change.
+
+Since 1.5.75
+ * A crash could occur if a single letter share name was
+ dynamically evaluated as matching a cell name. This was
+ due to a failure to treat the comparison of two nul
+ strings as identical.
+
+ * Docbook validation is performed by xmllint during builds.
+
+ * Volume package bugs in the file server can result in VOFFLINE
+ being returned to the client instead of VNOVOL or VMOVED. As
+ a result the Unix CM treats VOFFLINE the same as VMOVED and VNOVOL.
+ The Windows client has not. As a result, bugs in the file server
+ can cause the Windows client to lose if the volume has in fact
+ been moved to another server.
+
+ As part of this change, the volume location list is updated prior
+ to the volume status being applied to the server from which the
+ error was received.
+
+ * If the pages to be flushed are from a readonly or backup volume
+ they can't be dirty. In this case there is no need to stabilize
+ the pages before they are locked and recycled.
+ Stablilization is performed on the cm_scache_t object so do not
+ stabilize and unstablize for each cm_buf_t object.
+
+ * Over the years the processing of the Freelance callbacks have
+ added functionality that behaves much more like FetchStatus checks
+ to a file server. If the data version of the object has changed,
+ get the new data. Given that is the case, we can remove much of
+ the original refresh logic that is rather race prone. Say goodbye
+ to cm_fakeGettingCallback and cm_fakeDirCallback.
+
+ * When processing a pioctl path with either smb_ParseIoctlPath or
+ smb_ParseIoctlParent, cm_SyncOp(CM_SCACHESYNC_NEEDCALLBACK|GETSTATUS)
+ must be called on the cm_scache_t object to ensure that it is up
+ to date before we permit cm_Lookup or other operations to be performed
+ on it. Add the cm_SyncOp() call to smb_ParseIoctlPath and
+ smb_ParseIoctlParent to ensure it is done for all pioctl operations.
+
+ * The 32-bit tools installer was displaying client configuration wizard
+ pages. Since, the 32-bit tools share configuration with the AFS
+ service, the 32-bit tools installer should not be attempting to change
+ client configuration. Remove said wizard pages from the 32-bit tools
+ installer.
+
+ * cm_data.rootSCachep is a global pointer to the cm_scache_t that
+ represents the root.afs volume root directory. Throughout the
+ code this cm_scache_t was being used without ensuring that a
+ callback to the volume is in fact valid.
+
+ Under most circumstances this would not be a problem. However,
+ it is possible for a request to fail due to the lack of a callback
+ at a critical moment. Add a new function cm_rootScachep() that
+ attempts to ensure that a callback is present (if possible) prior
+ to use the cm_scache_t object.
+
+ * When the contents of the Freelance root directory changes the fake
+ directory buffers are updated and a fakeDirVersion is incremented.
+ The dataVersion of the cm_scache_t object is supposed to be updated
+ on the next access by performing a fake get callback request.
+ Unfortunately, this did not always occur because of a race. If another
+ Freelance object is updated first, the root directory object would
+ never successfully get a fake callback.
+
+ This patchset ensures that the generation of the fake directory
+ buffer content and the callback are obtained under the same set
+ of locks thereby removing the race.
+
+ * Enforce in afsd_service that tokens can be set for alternate
+ userids only if the SetToken pioctl is called from the
+ Local System account.
+
Since 1.5.74
* Revise SMB QuerySecurityInfo Response for MS10-020