This article was first written in February 2006 for the BeezNest technical website (http://glasnost.beeznest.org/articles/328).
Extract from the Linux CIFS Client homepage:
The CIFS VFS is a virtual file system for Linux to allow access to servers and storage appliances compliant with the SNIA CIFS Specification version 1.0 or later. Popular servers such as Samba, Windows 2000, Windows XP and many others support CIFS by default. The CIFS VFS does not provide support for older servers based on the more primitive SMB (Server Message Block) protocol (you can use the Linux filesystem smbfs for these).
CIFS VFS is designed to take advantage of advanced network filesystem features such as locking, Unicode (advanced internationalization), hardlinks, dfs (hierarchical, replicated name space), distributed caching and uses native TCP names (rather than RFC1001, Netbios names). Unlike some other network filesystems all key network function including authentication is provided in kernel (and changes to mount and/or a mount helper file are not required in order to enable the CIFS VFS).
The CIFS VFS has been tested with Linux 2.4.14 and later as well as regular testing on Linux 2.6 (and has been in the kernel source starting with Linux kernel 2.5.42. The CIFS client is no longer considered “expiremental” in Linux versions after 2.6.7 (cifs version 1.19) or later. Testing has been done on various hardware architectures including x86 and even big endian zSeries hardware. The cifs and smbfs filesystems can coexist on the same system and do not conflict.
So, it is usually safer nowadays to use the cifs filesystem type instead of the smbfs for reasonably recent SMB/CIFS server implementations. The options available are almost identical between both, and you will probably avoid errors like this one: smb_proc_readX_data: offset is larger than SMB_READX_MAX_PAD or negative!