Commit 1cb06d0b authored by Steve French's avatar Steve French

Introduce smb2 mounts as vers=2

As with Linux nfs client, which uses "nfsvers=" or "vers=" to
indicate which protocol to use for mount, specifying

"vers=smb2" or "vers=2"

will force an smb2 mount. When vers is not specified cifs is used

ie "vers=cifs" or "vers=1"

We can eventually autonegotiate down from smb2 to cifs
when smb2 is stable enough to make it the default, but this
is for the future.  At that time we could also implement a
"maxprotocol" mount option as smbclient and Samba have today,
but that would be premature until smb2 is stable.

Intially the smb2 Kconfig option will depend on "BROKEN"
until the merge is complete, and then be "EXPERIMENTAL"
When it is no longer experimental we can consider changing
the default protocol to attempt first.
Reviewed-by: default avatarJeff Layton <jlayton@redhat.com>
Reviewed-by: default avatarPavel Shilovsky <piastry@etersoft.ru>
Signed-off-by: default avatarSteve French <sfrench@us.ibm.com>
parent 257fb1f1
...@@ -102,6 +102,7 @@ struct smb_vol { ...@@ -102,6 +102,7 @@ struct smb_vol {
bool fsc:1; /* enable fscache */ bool fsc:1; /* enable fscache */
bool mfsymlinks:1; /* use Minshall+French Symlinks */ bool mfsymlinks:1; /* use Minshall+French Symlinks */
bool multiuser:1; bool multiuser:1;
bool use_smb2:1; /* force smb2 use on mount instead of cifs */
unsigned int rsize; unsigned int rsize;
unsigned int wsize; unsigned int wsize;
bool sockopt_tcp_nodelay:1; bool sockopt_tcp_nodelay:1;
...@@ -1038,6 +1039,22 @@ cifs_parse_mount_options(char *options, const char *devname, ...@@ -1038,6 +1039,22 @@ cifs_parse_mount_options(char *options, const char *devname,
cERROR(1, "bad security option: %s", value); cERROR(1, "bad security option: %s", value);
return 1; return 1;
} }
} else if (strnicmp(data, "vers", 3) == 0) {
if (!value || !*value) {
cERROR(1, "no protocol version specified"
" after vers= mount option");
} else if ((strnicmp(value, "cifs", 4) == 0) ||
(strnicmp(value, "1", 1) == 0)) {
/* this is the default */
continue;
} else if ((strnicmp(value, "smb2", 4) == 0) ||
(strnicmp(value, "2", 1) == 0)) {
#ifdef CONFIG_CIFS_SMB2
vol->use_smb2 = true;
#else
cERROR(1, "smb2 support not enabled");
#endif /* CONFIG_CIFS_SMB2 */
}
} else if ((strnicmp(data, "unc", 3) == 0) } else if ((strnicmp(data, "unc", 3) == 0)
|| (strnicmp(data, "target", 6) == 0) || (strnicmp(data, "target", 6) == 0)
|| (strnicmp(data, "path", 4) == 0)) { || (strnicmp(data, "path", 4) == 0)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment