Version 1.56
------------
Add "forcemandatorylock" mount option to allow user to use mandatory
rather than posix (advisory) byte range locks, even though server would
support posix byte range locks.  Fix query of root inode when prefixpath
specified and user does not have access to query information about the
top of the share.  Fix problem in 2.6.28 resolving DFS paths to
Samba servers (worked to Windows).  Fix rmdir so that pending search
(readdir) requests do not get invalid results which include the now
removed directory.  Fix oops in cifs_dfs_ref.c when prefixpath is not reachable
when using DFS.  Add better file create support to servers which support
the CIFS POSIX protocol extensions (this adds support for new flags
on create, and improves semantics for write of locked ranges).

Version 1.55
------------
Various fixes to make delete of open files behavior more predictable
(when delete of an open file fails we mark the file as "delete-on-close"
in a way that more servers accept, but only if we can first rename the
file to a temporary name).  Add experimental support for more safely
handling fcntl(F_SETLEASE).  Convert cifs to using blocking tcp
sends, and also let tcp autotune the socket send and receive buffers.
This reduces the number of EAGAIN errors returned by TCP/IP in
high stress workloads (and the number of retries on socket writes
when sending large SMBWriteX requests).  Fix case in which a portion of
data can in some cases not get written to the file on the server before the
file is closed.  Fix DFS parsing to properly handle path consumed field,
and to handle certain codepage conversions better.  Fix mount and
umount race that can cause oops in mount or umount or reconnect.

Version 1.54
------------
Fix premature write failure on congested networks (we would give up
on EAGAIN from the socket too quickly on large writes).
Cifs_mkdir and cifs_create now respect the setgid bit on parent dir.
Fix endian problems in acl (mode from/to cifs acl) on bigendian
architectures.  Fix problems with preserving timestamps on copying open
files (e.g. "cp -a") to Windows servers.  For mkdir and create honor setgid bit
on parent directory when server supports Unix Extensions but not POSIX
create. Update cifs.upcall version to handle new Kerberos sec flags
(this requires update of cifs.upcall program from Samba).  Fix memory leak
on dns_upcall (resolving DFS referralls).  Fix plain text password
authentication (requires setting SecurityFlags to 0x30030 to enable
lanman and plain text though).  Fix writes to be at correct offset when
file is open with O_APPEND and file is on a directio (forcediretio) mount.
Fix bug in rewinding readdir directory searches.  Add nodfs mount option.

Version 1.53
------------
DFS support added (Microsoft Distributed File System client support needed
for referrals which enable a hierarchical name space among servers).
Disable temporary caching of mode bits to servers which do not support
storing of mode (e.g. Windows servers, when client mounts without cifsacl
mount option) and add new "dynperm" mount option to enable temporary caching
of mode (enable old behavior).  Fix hang on mount caused when server crashes
tcp session during negotiate protocol.

Version 1.52
------------
Fix oops on second mount to server when null auth is used.
Enable experimental Kerberos support.  Return writebehind errors on flush
and sync so that events like out of disk space get reported properly on
cached files. Fix setxattr failure to certain Samba versions. Fix mount
of second share to disconnected server session (autoreconnect on this).
Add ability to modify cifs acls for handling chmod (when mounted with
cifsacl flag). Fix prefixpath path separator so we can handle mounts
with prefixpaths longer than one directory (one path component) when
mounted to Windows servers.  Fix slow file open when cifsacl
enabled. Fix memory leak in FindNext when the SMB call returns -EBADF.


Version 1.51
------------
Fix memory leak in statfs when mounted to very old servers (e.g.
Windows 9x).  Add new feature "POSIX open" which allows servers
which support the current POSIX Extensions to provide better semantics
(e.g. delete for open files opened with posix open).  Take into
account umask on posix mkdir not just older style mkdir.  Add
ability to mount to IPC$ share (which allows CIFS named pipes to be
opened, read and written as if they were files).  When 1st tree
connect fails (e.g. due to signing negotiation failure) fix
leak that causes cifsd not to stop and rmmod to fail to cleanup
cifs_request_buffers pool. Fix problem with POSIX Open/Mkdir on
bigendian architectures. Fix possible memory corruption when
EAGAIN returned on kern_recvmsg. Return better error if server
requires packet signing but client has disabled it. When mounted
with cifsacl mount option - mode bits are approximated based
on the contents of the ACL of the file or directory. When cifs
mount helper is missing convert make sure that UNC name 
has backslash (not forward slash) between ip address of server
and the share name.

Version 1.50
------------
Fix NTLMv2 signing. NFS server mounted over cifs works (if cifs mount is
done with "serverino" mount option).  Add support for POSIX Unlink
(helps with certain sharing violation cases when server such as
Samba supports newer POSIX CIFS Protocol Extensions). Add "nounix"
mount option to allow disabling the CIFS Unix Extensions for just
that mount. Fix hang on spinlock in find_writable_file (race when
reopening file after session crash).  Byte range unlock request to
windows server could unlock more bytes (on server copy of file)
than intended if start of unlock request is well before start of
a previous byte range lock that we issued.

Version 1.49
------------
IPv6 support.  Enable ipv6 addresses to be passed on mount (put the ipv6
address after the "ip=" mount option, at least until mount.cifs is fixed to
handle DNS host to ipv6 name translation).  Accept override of uid or gid
on mount even when Unix Extensions are negotiated (it used to be ignored
when Unix Extensions were ignored).  This allows users to override the
default uid and gid for files when they are certain that the uids or
gids on the server do not match those of the client.  Make "sec=none"
mount override username (so that null user connection is attempted)
to match what documentation said. Support for very large reads, over 127K,
available to some newer servers (such as Samba 3.0.26 and later but
note that it also requires setting CIFSMaxBufSize at module install
time to a larger value which may hurt performance in some cases).
Make sign option force signing (or fail if server does not support it).

Version 1.48
------------
Fix mtime bouncing around from local idea of last write times to remote time.
Fix hang (in i_size_read) when simultaneous size update of same remote file
on smp system corrupts sequence number. Do not reread unnecessarily partial page
(which we are about to overwrite anyway) when writing out file opened rw.
When DOS attribute of file on non-Unix server's file changes on the server side
from read-only back to read-write, reflect this change in default file mode
(we had been leaving a file's mode read-only until the inode were reloaded).
Allow setting of attribute back to ATTR_NORMAL (removing readonly dos attribute
when archive dos attribute not set and we are changing mode back to writeable
on server which does not support the Unix Extensions).  Remove read only dos
attribute on chmod when adding any write permission (ie on any of
user/group/other (not all of user/group/other ie  0222) when
mounted to windows.  Add support for POSIX MkDir (slight performance
enhancement and eliminates the network race between the mkdir and set 
path info of the mode).


Version 1.47
------------
Fix oops in list_del during mount caused by unaligned string.
Fix file corruption which could occur on some large file
copies caused by writepages page i/o completion bug.
Seek to SEEK_END forces check for update of file size for non-cached
files. Allow file size to be updated on remote extend of locally open,
non-cached file.  Fix reconnect to newer Samba servers (or other servers
which support the CIFS Unix/POSIX extensions) so that we again tell the
server the Unix/POSIX cifs capabilities which we support (SetFSInfo).
Add experimental support for new POSIX Open/Mkdir (which returns
stat information on the open, and allows setting the mode).

Version 1.46
------------
Support deep tree mounts.  Better support OS/2, Win9x (DOS) time stamps.
Allow null user to be specified on mount ("username="). Do not return
EINVAL on readdir when filldir fails due to overwritten blocksize
(fixes FC problem).  Return error in rename 2nd attempt retry (ie report
if rename by handle also fails, after rename by path fails, we were
not reporting whether the retry worked or not). Fix NTLMv2 to
work to Windows servers (mount with option "sec=ntlmv2").

Version 1.45
------------
Do not time out lockw calls when using posix extensions. Do not
time out requests if server still responding reasonably fast
on requests on other threads.  Improve POSIX locking emulation,
(lock cancel now works, and unlock of merged range works even
to Windows servers now).  Fix oops on mount to lanman servers
(win9x, os/2 etc.) when null password.  Do not send listxattr
(SMB to query all EAs) if nouser_xattr specified.  Fix SE Linux
problem (instantiate inodes/dentries in right order for readdir).

Version 1.44
------------
Rewritten sessionsetup support, including support for legacy SMB
session setup needed for OS/2 and older servers such as Windows 95 and 98.
Fix oops on ls to OS/2 servers.  Add support for level 1 FindFirst
so we can do search (ls etc.) to OS/2.  Do not send NTCreateX
or recent levels of FindFirst unless server says it supports NT SMBs
(instead use legacy equivalents from LANMAN dialect). Fix to allow
NTLMv2 authentication support (now can use stronger password hashing
on mount if corresponding /proc/fs/cifs/SecurityFlags is set (0x4004).
Allow override of global cifs security flags on mount via "sec=" option(s).

Version 1.43
------------
POSIX locking to servers which support CIFS POSIX Extensions
(disabled by default controlled by proc/fs/cifs/Experimental).
Handle conversion of long share names (especially Asian languages)
to Unicode during mount. Fix memory leak in sess struct on reconnect.
Fix rare oops after acpi suspend.  Fix O_TRUNC opens to overwrite on
cifs open which helps rare case when setpathinfo fails or server does
not support it. 

Version 1.42
------------
Fix slow oplock break when mounted to different servers at the same time and
the tids match and we try to find matching fid on wrong server. Fix read
looping when signing required by server (2.6.16 kernel only). Fix readdir
vs. rename race which could cause each to hang. Return . and .. even
if server does not.  Allow searches to skip first three entries and
begin at any location. Fix oops in find_writeable_file.

Version 1.41
------------
Fix NTLMv2 security (can be enabled in /proc/fs/cifs) so customers can
configure stronger authentication.  Fix sfu symlinks so they can
be followed (not just recognized).  Fix wraparound of bcc on
read responses when buffer size over 64K and also fix wrap of
max smb buffer size when CIFSMaxBufSize over 64K.  Fix oops in
cifs_user_read and cifs_readpages (when EAGAIN on send of smb
on socket is returned over and over).  Add POSIX (advisory) byte range
locking support (requires server with newest CIFS UNIX Extensions
to the protocol implemented). Slow down negprot slightly in port 139
RFC1001 case to give session_init time on buggy servers.

Version 1.40
------------
Use fsuid (fsgid) more consistently instead of uid (gid). Improve performance
of readpages by eliminating one extra memcpy. Allow update of file size
from remote server even if file is open for write as long as mount is
directio.  Recognize share mode security and send NTLM encrypted password
on tree connect if share mode negotiated.

Version 1.39
------------
Defer close of a file handle slightly if pending writes depend on that handle
(this reduces the EBADF bad file handle errors that can be logged under heavy
stress on writes). Modify cifs Kconfig options to expose CONFIG_CIFS_STATS2 
Fix SFU style symlinks and mknod needed for servers which do not support the
CIFS Unix Extensions.  Fix setfacl/getfacl on bigendian. Timeout negative
dentries so files that the client sees as deleted but that later get created
on the server will be recognized.  Add client side permission check on setattr.
Timeout stuck requests better (where server has never responded or sent corrupt
responses)

Version 1.38
------------
Fix tcp socket retransmission timeouts (e.g. on ENOSPACE from the socket)
to be smaller at first (but increasing) so large write performance performance
over GigE is better.  Do not hang thread on illegal byte range lock response
from Windows (Windows can send an RFC1001 size which does not match smb size) by
allowing an SMBs TCP length to be up to a few bytes longer than it should be.
wsize and rsize can now be larger than negotiated buffer size if server
supports large readx/writex, even when directio mount flag not specified.
Write size will in many cases now be 16K instead of 4K which greatly helps
file copy performance on lightly loaded networks.  Fix oops in dnotify
when experimental config flag enabled. Make cifsFYI more granular.

Version 1.37
------------
Fix readdir caching when unlink removes file in current search buffer,
and this is followed by a rewind search to just before the deleted entry.
Do not attempt to set ctime unless atime and/or mtime change requested
(most servers throw it away anyway). Fix length check of received smbs
to be more accurate. Fix big endian problem with mapchars mount option,
and with a field returned by statfs.

Version 1.36
------------
Add support for mounting to older pre-CIFS servers such as Windows9x and ME.
For these older servers, add option for passing netbios name of server in
on mount (servernetbiosname).  Add suspend support for power management, to
avoid cifsd thread preventing software suspend from working.
Add mount option for disabling the default behavior of sending byte range lock
requests to the server (necessary for certain applications which break with
mandatory lock behavior such as Evolution), and also mount option for
requesting case insensitive matching for path based requests (requesting
case sensitive is the default).

Version 1.35
------------
Add writepage performance improvements.  Fix path name conversions
for long filenames on mounts which were done with "mapchars" mount option
specified.  Ensure multiplex ids do not collide.  Fix case in which 
rmmod can oops if done soon after last unmount.  Fix truncated
search (readdir) output when resume filename was a long filename.
Fix filename conversion when mapchars mount option was specified and
filename was a long filename.

Version 1.34
------------
Fix error mapping of the TOO_MANY_LINKS (hardlinks) case.
Do not oops if root user kills cifs oplock kernel thread or
kills the cifsd thread (NB: killing the cifs kernel threads is not
recommended, unmount and rmmod cifs will kill them when they are
no longer needed).  Fix readdir to ASCII servers (ie older servers
which do not support Unicode) and also require asterisk.
Fix out of memory case in which data could be written one page
off in the page cache.

Version 1.33
------------
Fix caching problem, in which readdir of directory containing a file
which was cached could cause the file's time stamp to be updated
without invalidating the readahead data (so we could get stale
file data on the client for that file even as the server copy changed).
Cleanup response processing so cifsd can not loop when abnormally
terminated.


Version 1.32
------------
Fix oops in ls when Transact2 FindFirst (or FindNext) returns more than one
transact response for an SMB request and search entry split across two frames.
Add support for lsattr (getting ext2/ext3/reiserfs attr flags from the server)
as new protocol extensions. Do not send Get/Set calls for POSIX ACLs
unless server explicitly claims to support them in CIFS Unix extensions
POSIX ACL capability bit. Fix packet signing when multiuser mounting with
different users from the same client to the same server. Fix oops in
cifs_close. Add mount option for remapping reserved characters in
filenames (also allow recognizing files with created by SFU which have any
of these seven reserved characters, except backslash, to be recognized).
Fix invalid transact2 message (we were sometimes trying to interpret
oplock breaks as SMB responses). Add ioctl for checking that the
current uid matches the uid of the mounter (needed by umount.cifs).
Reduce the number of large buffer allocations in cifs response processing
(significantly reduces memory pressure under heavy stress with multiple
processes accessing the same server at the same time).

Version 1.31
------------
Fix updates of DOS attributes and time fields so that files on NT4 servers
do not get marked delete on close. Display sizes of cifs buffer pools in
cifs stats. Fix oops in unmount when cifsd thread being killed by 
shutdown. Add generic readv/writev and aio support. Report inode numbers 
consistently in readdir and lookup (when serverino mount option is
specified use the inode number that the server reports - for both lookup
and readdir, otherwise by default the locally generated inode number is used
for inodes created in either path since servers are not always able to 
provide unique inode numbers when exporting multiple volumes from under one
sharename).

Version 1.30
------------
Allow new nouser_xattr mount parm to disable xattr support for user namespace.
Do not flag user_xattr mount parm in dmesg.  Retry failures setting file time  
(mostly affects NT4 servers) by retry with handle based network operation. 
Add new POSIX Query FS Info for returning statfs info more accurately.
Handle passwords with multiple commas in them.

Version 1.29
------------
Fix default mode in sysfs of cifs module parms.  Remove old readdir routine.
Fix capabilities flags for large readx so as to allow reads larger than 64K.

Version 1.28
------------
Add module init parm for large SMB buffer size (to allow it to be changed
from its default of 16K) which is especially useful for large file copy
when mounting with the directio mount option. Fix oops after 
returning from mount when experimental ExtendedSecurity enabled and
SpnegoNegotiated returning invalid error. Fix case to retry better when 
peek returns from 1 to 3 bytes on socket which should have more data.
Fixed path based calls (such as cifs lookup) to handle path names
longer than 530 (now can handle PATH_MAX). Fix pass through authentication
from Samba server to DC (Samba required dummy LM password).

Version 1.27
------------
Turn off DNOTIFY (directory change notification support) by default
(unless built with the experimental flag) to fix hang with KDE
file browser. Fix DNOTIFY flag mappings.  Fix hang (in wait_event
waiting on an SMB response) in SendReceive when session dies but
reconnects quickly from another task.  Add module init  parms for
minimum number of large and small network buffers in the buffer pools,
and for the maximum number of simultaneous requests.

Version 1.26
------------
Add setfacl support to allow setting of ACLs remotely to Samba 3.10 and later
and other POSIX CIFS compliant servers.  Fix error mapping for getfacl 
to EOPNOTSUPP when server does not support posix acls on the wire. Fix 
improperly zeroed buffer in CIFS Unix extensions set times call. 

Version 1.25
------------
Fix internationalization problem in cifs readdir with filenames that map to 
longer UTF-8 strings than the string on the wire was in Unicode.  Add workaround
for readdir to netapp servers. Fix search rewind (seek into readdir to return 
non-consecutive entries).  Do not do readdir when server negotiates 
buffer size to small to fit filename. Add support for reading POSIX ACLs from
the server (add also acl and noacl mount options).

Version 1.24
------------
Optionally allow using server side inode numbers, rather than client generated
ones by specifying mount option "serverino" - this is required for some apps
to work which double check hardlinked files and have persistent inode numbers.

Version 1.23
------------
Multiple bigendian fixes. On little endian systems (for reconnect after
network failure) fix tcp session reconnect code so we do not try first
to reconnect on reverse of port 445. Treat reparse points (NTFS junctions)
as directories rather than symlinks because we can do follow link on them.

Version 1.22
------------
Add config option to enable XATTR (extended attribute) support, mapping
xattr names in the "user." namespace space to SMB/CIFS EAs. Lots of
minor fixes pointed out by the Stanford SWAT checker (mostly missing
or out of order NULL pointer checks in little used error paths).

Version 1.21
------------
Add new mount parm to control whether mode check (generic_permission) is done
on the client.  If Unix extensions are enabled and the uids on the client
and server do not match, client permission checks are meaningless on
server uids that do not exist on the client (this does not affect the
normal ACL check which occurs on the server).  Fix default uid
on mknod to match create and mkdir. Add optional mount parm to allow
override of the default uid behavior (in which the server sets the uid
and gid of newly created files). Normally for network filesystem mounts
user want the server to set the uid/gid on newly created files (rather than 
using uid of the client processes you would in a local filesystem).

Version 1.20
------------
Make transaction counts more consistent. Merge /proc/fs/cifs/SimultaneousOps
info into /proc/fs/cifs/DebugData.  Fix oops in rare oops in readdir 
(in build_wildcard_path_from_dentry).  Fix mknod to pass type field
(block/char/fifo) properly.  Remove spurious mount warning log entry when
credentials passed as mount argument. Set major/minor device number in
inode for block and char devices when unix extensions enabled.

Version 1.19
------------
Fix /proc/fs/cifs/Stats and DebugData display to handle larger
amounts of return data. Properly limit requests to MAX_REQ (50
is the usual maximum active multiplex SMB/CIFS requests per server).
Do not kill cifsd (and thus hurt the other SMB session) when more than one
session to the same server (but with different userids) exists and one
of the two user's smb sessions is being removed while leaving the other.
Do not loop reconnecting in cifsd demultiplex thread when admin
kills the thread without going through unmount.

Version 1.18
------------
Do not rename hardlinked files (since that should be a noop). Flush
cached write behind data when reopening a file after session abend,
except when already in write. Grab per socket sem during reconnect 
to avoid oops in sendmsg if overlapping with reconnect. Do not
reset cached inode file size on readdir for files open for write on 
client.


Version 1.17
------------
Update number of blocks in file so du command is happier (in Linux a fake
blocksize of 512 is required for calculating number of blocks in inode).
Fix prepare write of partial pages to read in data from server if possible.
Fix race on tcpStatus field between unmount and reconnection code, causing
cifsd process sometimes to hang around forever. Improve out of memory
checks in cifs_filldir

Version 1.16
------------
Fix incorrect file size in file handle based setattr on big endian hardware.
Fix oops in build_path_from_dentry when out of memory.  Add checks for invalid
and closing file structs in writepage/partialpagewrite.  Add statistics
for each mounted share (new menuconfig option). Fix endianness problem in
volume information displayed in /proc/fs/cifs/DebugData (only affects
affects big endian architectures). Prevent renames while constructing
path names for open, mkdir and rmdir.

Version 1.15
------------
Change to mempools for alloc smb request buffers and multiplex structs
to better handle low memory problems (and potential deadlocks).

Version 1.14
------------
Fix incomplete listings of large directories on Samba servers when Unix
extensions enabled.  Fix oops when smb_buffer can not be allocated. Fix
rename deadlock when writing out dirty pages at same time.

Version 1.13
------------
Fix open of files in which O_CREATE can cause the mode to change in
some cases. Fix case in which retry of write overlaps file close.
Fix PPC64 build error.  Reduce excessive stack usage in smb password
hashing. Fix overwrite of Linux user's view of file mode to Windows servers.

Version 1.12
------------
Fixes for large file copy, signal handling, socket retry, buffer
allocation and low memory situations.

Version 1.11
------------
Better port 139 support to Windows servers (RFC1001/RFC1002 Session_Initialize)
also now allowing support for specifying client netbiosname.  NT4 support added.

Version 1.10
------------
Fix reconnection (and certain failed mounts) to properly wake up the
blocked users thread so it does not seem hung (in some cases was blocked
until the cifs receive timeout expired). Fix spurious error logging
to kernel log when application with open network files killed. 

Version 1.09
------------
Fix /proc/fs module unload warning message (that could be logged
to the kernel log). Fix intermittent failure in connectathon
test7 (hardlink count not immediately refreshed in case in which
inode metadata can be incorrectly kept cached when time near zero)

Version 1.08
------------
Allow file_mode and dir_mode (specified at mount time) to be enforced
locally (the server already enforced its own ACLs too) for servers
that do not report the correct mode (do not support the 
CIFS Unix Extensions).

Version 1.07
------------
Fix some small memory leaks in some unmount error paths. Fix major leak
of cache pages in readpages causing multiple read oriented stress
testcases (including fsx, and even large file copy) to fail over time. 

Version 1.06
------------
Send NTCreateX with ATTR_POSIX if Linux/Unix extensions negotiated with server.
This allows files that differ only in case and improves performance of file
creation and file open to such servers.  Fix semaphore conflict which causes 
slow delete of open file to Samba (which unfortunately can cause an oplock
break to self while vfs_unlink held i_sem) which can hang for 20 seconds.

Version 1.05
------------
fixes to cifs_readpages for fsx test case

Version 1.04
------------
Fix caching data integrity bug when extending file size especially when no
oplock on file.  Fix spurious logging of valid already parsed mount options
that are parsed outside of the cifs vfs such as nosuid.


Version 1.03
------------
Connect to server when port number override not specified, and tcp port
unitialized.  Reset search to restart at correct file when kernel routine
filldir returns error during large directory searches (readdir). 

Version 1.02
------------
Fix caching problem when files opened by multiple clients in which 
page cache could contain stale data, and write through did
not occur often enough while file was still open when read ahead
(read oplock) not allowed.  Treat "sep=" when first mount option
as an override of comma as the default separator between mount
options. 

Version 1.01
------------
Allow passwords longer than 16 bytes. Allow null password string.

Version 1.00
------------
Gracefully clean up failed mounts when attempting to mount to servers such as
Windows 98 that terminate tcp sessions during protocol negotiation.  Handle
embedded commas in mount parsing of passwords.

Version 0.99
------------
Invalidate local inode cached pages on oplock break and when last file
instance is closed so that the client does not continue using stale local
copy rather than later modified server copy of file.  Do not reconnect
when server drops the tcp session prematurely before negotiate
protocol response.  Fix oops in reopen_file when dentry freed.  Allow
the support for CIFS Unix Extensions to be disabled via proc interface.

Version 0.98
------------
Fix hang in commit_write during reconnection of open files under heavy load.
Fix unload_nls oops in a mount failure path. Serialize writes to same socket
which also fixes any possible races when cifs signatures are enabled in SMBs
being sent out of signature sequence number order.    

Version 0.97
------------
Fix byte range locking bug (endian problem) causing bad offset and
length.

Version 0.96
------------
Fix oops (in send_sig) caused by CIFS unmount code trying to
wake up the demultiplex thread after it had exited. Do not log
error on harmless oplock release of closed handle.

Version 0.95
------------
Fix unsafe global variable usage and password hash failure on gcc 3.3.1
Fix problem reconnecting secondary mounts to same server after session 
failure.  Fix invalid dentry - race in mkdir when directory gets created
by another client between the lookup and mkdir.
 
Version 0.94
------------
Fix to list processing in reopen_files. Fix reconnection when server hung
but tcpip session still alive.  Set proper timeout on socket read.

Version 0.93
------------
Add missing mount options including iocharset.  SMP fixes in write and open. 
Fix errors in reconnecting after TCP session failure.  Fix module unloading
of default nls codepage

Version 0.92
------------
Active smb transactions should never go negative (fix double FreeXid). Fix
list processing in file routines. Check return code on kmalloc in open.
Fix spinlock usage for SMP.

Version 0.91
------------
Fix oops in reopen_files when invalid dentry. drop dentry on server rename 
and on revalidate errors. Fix cases where pid is now tgid.  Fix return code
on create hard link when server does not support them. 

Version 0.90
------------
Fix scheduling while atomic error in getting inode info on newly created file. 
Fix truncate of existing files opened with O_CREAT but not O_TRUNC set.

Version 0.89
------------
Fix oops on write to dead tcp session. Remove error log write for case when file open
O_CREAT but not O_EXCL

Version 0.88
------------
Fix non-POSIX behavior on rename of open file and delete of open file by taking 
advantage of trans2 SetFileInfo rename facility if available on target server.
Retry on ENOSPC and EAGAIN socket errors.

Version 0.87
------------
Fix oops on big endian readdir.  Set blksize to be even power of two (2**blkbits) to fix
allocation size miscalculation. After oplock token lost do not read through
cache. 

Version 0.86
------------
Fix oops on empty file readahead.  Fix for file size handling for locally cached files.

Version 0.85
------------
Fix oops in mkdir when server fails to return inode info. Fix oops in reopen_files
during auto reconnection to server after server recovered from failure.

Version 0.84
------------
Finish support for Linux 2.5 open/create changes, which removes the
redundant NTCreate/QPathInfo/close that was sent during file create.
Enable oplock by default. Enable packet signing by default (needed to 
access many recent Windows servers)

Version 0.83
------------
Fix oops when mounting to long server names caused by inverted parms to kmalloc.
Fix MultiuserMount (/proc/fs/cifs configuration setting) so that when enabled
we will choose a cifs user session (smb uid) that better matches the local
uid if a) the mount uid does not match the current uid and b) we have another
session to the same server (ip address) for a different mount which
matches the current local uid.

Version 0.82
------------
Add support for mknod of block or character devices.  Fix oplock
code (distributed caching) to properly send response to oplock
break from server.

Version 0.81
------------
Finish up CIFS packet digital signing for the default
NTLM security case. This should help Windows 2003
network interoperability since it is common for
packet signing to be required now. Fix statfs (stat -f)
which recently started returning errors due to 
invalid value (-1 instead of 0) being set in the
struct kstatfs f_ffiles field.

Version 0.80
-----------
Fix oops on stopping oplock thread when removing cifs when
built as module.

Version 0.79
------------
Fix mount options for ro (readonly), uid, gid and file and directory mode. 

Version 0.78
------------
Fix errors displayed on failed mounts to be more understandable.
Fixed various incorrect or misleading smb to posix error code mappings.

Version 0.77
------------
Fix display of NTFS DFS junctions to display as symlinks.
They are the network equivalent.  Fix oops in 
cifs_partialpagewrite caused by missing spinlock protection
of openfile linked list.  Allow writebehind caching errors to 
be returned to the application at file close.

Version 0.76
------------
Clean up options displayed in /proc/mounts by show_options to
be more consistent with other filesystems.

Version 0.75
------------
Fix delete of readonly file to Windows servers.  Reflect
presence or absence of read only dos attribute in mode
bits for servers that do not support CIFS Unix extensions.
Fix shortened results on readdir of large directories to
servers supporting CIFS Unix extensions (caused by
incorrect resume key).

Version 0.74
------------
Fix truncate bug (set file size) that could cause hangs e.g. running fsx

Version 0.73
------------
unload nls if mount fails.

Version 0.72
------------
Add resume key support to search (readdir) code to workaround
Windows bug.  Add /proc/fs/cifs/LookupCacheEnable which
allows disabling caching of attribute information for
lookups.

Version 0.71
------------
Add more oplock handling (distributed caching code).  Remove
dead code.  Remove excessive stack space utilization from
symlink routines.

Version 0.70
------------
Fix oops in get dfs referral (triggered when null path sent in to
mount).  Add support for overriding rsize at mount time.

Version 0.69
------------
Fix buffer overrun in readdir which caused intermittent kernel oopses.
Fix writepage code to release kmap on write data.  Allow "-ip=" new 
mount option to be passed in on parameter distinct from the first part
(server name portion of) the UNC name.  Allow override of the
tcp port of the target server via new mount option "-port="  

Version 0.68
------------
Fix search handle leak on rewind.  Fix setuid and gid so that they are 
reflected in the local inode immediately.  Cleanup of whitespace
to make 2.4 and 2.5 versions more consistent.


Version 0.67
------------
Fix signal sending so that captive thread (cifsd) exits on umount 
(which was causing the warning in kmem_cache_free of the request buffers
at rmmod time).  This had broken as a sideeffect of the recent global
kernel change to daemonize.  Fix memory leak in readdir code which
showed up in "ls -R" (and applications that did search rewinding).

Version 0.66
------------
Reconnect tids and fids after session reconnection (still do not
reconnect byte range locks though).  Fix problem caching
lookup information for directory inodes, improving performance,
especially in deep directory trees.  Fix various build warnings.

Version 0.65
------------
Finish fixes to commit write for caching/readahead consistency.  fsx 
now works to Samba servers.  Fix oops caused when readahead
was interrupted by a signal.

Version 0.64
------------
Fix data corruption (in partial page after truncate) that caused fsx to
fail to Windows servers.  Cleaned up some extraneous error logging in
common error paths.  Add generic sendfile support.

Version 0.63
------------
Fix memory leak in AllocMidQEntry.
Finish reconnection logic, so connection with server can be dropped
(or server rebooted) and the cifs client will reconnect.  

Version 0.62
------------
Fix temporary socket leak when bad userid or password specified 
(or other SMBSessSetup failure).  Increase maximum buffer size to slightly
over 16K to allow negotiation of up to Samba and Windows server default read 
sizes.  Add support for readpages

Version 0.61
------------
Fix oops when username not passed in on mount.  Extensive fixes and improvements
to error logging (strip redundant newlines, change debug macros to ensure newline
passed in and to be more consistent).  Fix writepage wrong file handle problem,
a readonly file handle could be incorrectly used to attempt to write out
file updates through the page cache to multiply open files.  This could cause
the iozone benchmark to fail on the fwrite test. Fix bug mounting two different
shares to the same Windows server when using different usernames
(doing this to Samba servers worked but Windows was rejecting it) - now it is
possible to use different userids when connecting to the same server from a
Linux client. Fix oops when treeDisconnect called during unmount on
previously freed socket.

Version 0.60
------------
Fix oops in readpages caused by not setting address space operations in inode in 
rare code path. 

Version 0.59
------------
Includes support for deleting of open files and renaming over existing files (per POSIX
requirement).  Add readlink support for Windows junction points (directory symlinks).

Version 0.58
------------
Changed read and write to go through pagecache. Added additional address space operations.
Memory mapped operations now working.

Version 0.57
------------
Added writepage code for additional memory mapping support.  Fixed leak in xids causing
the simultaneous operations counter (/proc/fs/cifs/SimultaneousOps) to increase on 
every stat call.  Additional formatting cleanup. 

Version 0.56
------------
Fix bigendian bug in order of time conversion. Merge 2.5 to 2.4 version.  Formatting cleanup.   

Version 0.55
------------
Fixes from Zwane Mwaikambo for adding missing return code checking in a few places.
Also included a modified version of his fix to protect global list manipulation of
the smb session and tree connection and mid related global variables.

Version 0.54
------------
Fix problem with captive thread hanging around at unmount time.  Adjust to 2.5.42-pre
changes to superblock layout.   Remove wasteful allocation of smb buffers (now the send 
buffer is reused for responses).  Add more oplock handling. Additional minor cleanup.

Version 0.53
------------
More stylistic updates to better match kernel style.  Add additional statistics
for filesystem which can be viewed via /proc/fs/cifs.  Add more pieces of NTLMv2
and CIFS Packet Signing enablement.

Version 0.52
------------
Replace call to sleep_on with safer wait_on_event.
Make stylistic changes to better match kernel style recommendations.
Remove most typedef usage (except for the PDUs themselves).

Version 0.51
------------
Update mount so the -unc mount option is no longer required (the ip address can be specified
in a UNC style device name.   Implementation of readpage/writepage started.

Version 0.50
------------
Fix intermittent problem with incorrect smb header checking on badly 
fragmented tcp responses

Version 0.49
------------
Fixes to setting of allocation size and file size.

Version 0.48
------------
Various 2.5.38 fixes.  Now works on 2.5.38

Version 0.47
------------
Prepare for 2.5 kernel merge.  Remove ifdefs.

Version 0.46
------------
Socket buffer management fixes.  Fix dual free.

Version 0.45
------------
Various big endian fixes for hardlinks and symlinks and also for dfs.

Version 0.44
------------
Various big endian fixes for servers with Unix extensions such as Samba

Version 0.43
------------
Various FindNext fixes for incorrect filenames on large directory searches on big endian
clients.  basic posix file i/o tests now work on big endian machines, not just le

Version 0.42
------------
SessionSetup and NegotiateProtocol now work from Big Endian machines.
Various Big Endian fixes found during testing on the Linux on 390.  Various fixes for compatibility with older
versions of 2.4 kernel (now builds and works again on kernels at least as early as 2.4.7).

Version 0.41
------------
Various minor fixes for Connectathon Posix "basic" file i/o test suite.  Directory caching fixed so hardlinked
files now return the correct number of links on fstat as they are repeatedly linked and unlinked.

Version 0.40
------------
Implemented "Raw" (i.e. not encapsulated in SPNEGO) NTLMSSP (i.e. the Security Provider Interface used to negotiate
session advanced session authentication).  Raw NTLMSSP is preferred by Windows 2000 Professional and Windows XP.
Began implementing support for SPNEGO encapsulation of NTLMSSP based session authentication blobs
(which is the mechanism preferred by Windows 2000 server in the absence of Kerberos).

Version 0.38
------------
Introduced optional mount helper utility mount.cifs and made coreq changes to cifs vfs to enable
it. Fixed a few bugs in the DFS code (e.g. bcc two bytes too short and incorrect uid in PDU).

Version 0.37
------------
Rewrote much of connection and mount/unmount logic to handle bugs with
multiple uses to same share, multiple users to same server etc.

Version 0.36
------------
Fixed major problem with dentry corruption (missing call to dput)

Version 0.35
------------
Rewrite of readdir code to fix bug. Various fixes for bigendian machines.
Begin adding oplock support.  Multiusermount and oplockEnabled flags added to /proc/fs/cifs
although corresponding function not fully implemented in the vfs yet

Version 0.34
------------
Fixed dentry caching bug, misc. cleanup 

Version 0.33
------------
Fixed 2.5 support to handle build and configure changes as well as misc. 2.5 changes.  Now can build
on current 2.5 beta version (2.5.24) of the Linux kernel as well as on 2.4 Linux kernels.
Support for STATUS codes (newer 32 bit NT error codes) added.  DFS support begun to be added.

Version 0.32
------------
Unix extensions (symlink, readlink, hardlink, chmod and some chgrp and chown) implemented
and tested against Samba 2.2.5


Version 0.31
------------
1) Fixed lockrange to be correct (it was one byte too short)

2) Fixed GETLK (i.e. the fcntl call to test a range of bytes in a file to see if locked) to correctly 
show range as locked when there is a conflict with an existing lock.

3) default file perms are now 2767 (indicating support for mandatory locks) instead of 777 for directories
in most cases.  Eventually will offer optional ability to query server for the correct perms.

3) Fixed eventual trap when mounting twice to different shares on the same server when the first succeeded 
but the second one was invalid and failed (the second one was incorrectly disconnecting the tcp and smb
session) 

4) Fixed error logging of valid mount options

5) Removed logging of password field.

6) Moved negotiate, treeDisconnect and uloggoffX (only tConx and SessSetup remain in connect.c) to cifssmb.c
and cleaned them up and made them more consistent with other cifs functions. 

7) Server support for Unix extensions is now fully detected and FindFirst is implemented both ways 
(with or without Unix extensions) but FindNext and QueryPathInfo with the Unix extensions are not completed,
nor is the symlink support using the Unix extensions

8) Started adding the readlink and follow_link code 

Version 0.3 
-----------
Initial drop

