Version 2.04 September 13, 2017

A Partial List of Missing Features
==================================

Contributions are welcome.  There are plenty of opportunities
for visible, important contributions to this module.  Here
is a partial list of the known problems and missing features:

a) SMB3 (and SMB3.02) missing optional features:
   - RDMA (started)
   - multichannel (started)
   - directory leases (improved metadata caching)
   - T10 copy offload (copy chunk is only mechanism supported)

b) improved sparse file support

c) Directory entry caching relies on a 1 second timer, rather than
using Directory Leases

d) quota support (needs minor kernel change since quota calls
to make it to network filesystems or deviceless filesystems)

e) Better optimize open to reduce redundant opens (using reference
counts more) and to improve use of compounding in SMB3 to reduce
number of roundtrips.

f) Finish inotify support so kde and gnome file list windows
will autorefresh (partially complete by Asser). Needs minor kernel
vfs change to support removing D_NOTIFY on a file.   

g) Add GUI tool to configure /proc/fs/cifs settings and for display of
the CIFS statistics (started)

h) implement support for security and trusted categories of xattrs
(requires minor protocol extension) to enable better support for SELINUX

i) Implement O_DIRECT flag on open (already supported on mount)

j) Create UID mapping facility so server UIDs can be mapped on a per
mount or a per server basis to client UIDs or nobody if no mapping
exists. Also better integration with winbind for resolving SID owners

k) Add tools to take advantage of more smb3 specific ioctls and features

l) encrypted file support

m) improved stats gathering, tools (perhaps integration with nfsometer?)

n) allow setting more NTFS/SMB3 file attributes remotely (currently limited to compressed
file attribute via chflags) and improve user space tools for managing and
viewing them.

o) mount helper GUI (to simplify the various configuration options on mount)

p) autonegotiation of dialects (offering more than one dialect ie SMB3.02,
SMB3, SMB2.1 not just SMB3).

q) Allow mount.cifs to be more verbose in reporting errors with dialect
or unsupported feature errors.

r) updating cifs documentation, and user guid.

s) Addressing bugs found by running a broader set of xfstests in standard
file system xfstest suite.

t) split cifs and smb3 support into separate modules so legacy (and less
secure) CIFS dialect can be disabled in environments that don't need it
and simplify the code.

u) Finish up SMB3.1.1 dialect support

v) POSIX Extensions for SMB3.1.1

KNOWN BUGS
====================================
See http://bugzilla.samba.org - search on product "CifsVFS" for
current bug list.  Also check http://bugzilla.kernel.org (Product = File System, Component = CIFS)

1) existing symbolic links (Windows reparse points) are recognized but
can not be created remotely. They are implemented for Samba and those that
support the CIFS Unix extensions, although earlier versions of Samba
overly restrict the pathnames.
2) follow_link and readdir code does not follow dfs junctions
but recognizes them

Misc testing to do
==================
1) check out max path names and max path name components against various server
types. Try nested symlinks (8 deep). Return max path name in stat -f information

2) Improve xfstest's cifs enablement and adapt xfstests where needed to test
cifs better

3) Additional performance testing and optimization using iozone and similar - 
there are some easy changes that can be done to parallelize sequential writes,
and when signing is disabled to request larger read sizes (larger than 
negotiated size) and send larger write sizes to modern servers.

4) More exhaustively test against less common servers
