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!