/proc/mounts and the mount command don't show the auto negotiated version after mounting with vers=default (or without specifying vers=).
Instead /proc/mounts just says vers=default.
Client OS: openSUSE-LEAP-15.2 with Linux-5.3
This non-public bug seems to be similar.
(I don't habe a RedHat license, so I can't see the details)
I was only able to reproduce with Windows Server 2012.
A Windows Server 2008 and Samba-4.6 (openSUSE-LEAP-42.3) work fine.
(e.g. /proc/mounts shows vers=3.11)
Workaround with some help from:
echo 'module cifs +p' > /sys/kernel/debug/dynamic_debug/control
echo 'file fs/cifs/* +p' > /sys/kernel/debug/dynamic_debug/control
echo 7 > /proc/fs/cifs/cifsFYI
mount -t cifs ...
dmesg | grep -E 'cifs.*\.[0-9]'
# -> negotiated smb3.02 dialect
So for me it's actually 3.02 what's been negotiated with Windows Server 2012.
"man mount.cifs" may seem a little ambiguous about the vers=default behavior.
SMB protocol version. Allowed values are:
- default - Tries to negotiate the highest SMB2+ version supported by both the client and server.
The default since v4.13.5 is for the client and server to negotiate
the highest possible version greater than or equal to ``2.1``. In
kernels prior to v4.13, the default was ``1.0``. For kernels
between v4.13 and v4.13.5 the default is ``3.0``.
The first one sound more like 2.0 <= vers < 3.0.
While the second sounds more like 2.1 <= version (without upper limit).
To me it looks like the second (2.1 <= version) is what's actually implemented (at least with Linux-5.3 on openSUSE-LEAP-15.2).
Just to make sure I get this right:
With the same version of the kernel (openSUSE-LEAP-15.2 with Linux-5.3), when you mount with vers=default:
- a Windows Server 2012 share you see vers=3.11 in /proc/mounts
- anything else you see vers=default in /proc/mounts
And you are expecting the see the explicit version instead of default. Is that right?
As a side note, if you just need to version you can look at /proc/fs/cifs/DebugData. It will list all currently active connections along with their version as "Dialect":
# mount.cifs //foo/bar ....
# grep Dialect /proc/fs/cifs/DebugData
Number of credits: 407 Dialect 0x311 signed
=> 0x311 is 3.1.1