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.

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

