smb3: allow disabling requesting leases
In some cases to work around server bugs or performance problems it can be helpful to be able to disable requesting SMB2.1/SMB3 leases on a particular mount (not to all servers and all shares we are mounted to). Add new mount parm "nolease" which turns off requesting leases on directory or file opens. Currently the only way to disable leases is globally through a module load parameter. This is more granular. Suggested-by: Pavel Shilovsky <pshilov@microsoft.com> Signed-off-by: Steve French <stfrench@microsoft.com> Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com> Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com> CC: Stable <stable@vger.kernel.org>
This commit is contained in:
@@ -74,7 +74,7 @@ enum {
|
||||
Opt_user_xattr, Opt_nouser_xattr,
|
||||
Opt_forceuid, Opt_noforceuid,
|
||||
Opt_forcegid, Opt_noforcegid,
|
||||
Opt_noblocksend, Opt_noautotune,
|
||||
Opt_noblocksend, Opt_noautotune, Opt_nolease,
|
||||
Opt_hard, Opt_soft, Opt_perm, Opt_noperm,
|
||||
Opt_mapposix, Opt_nomapposix,
|
||||
Opt_mapchars, Opt_nomapchars, Opt_sfu,
|
||||
@@ -135,6 +135,7 @@ static const match_table_t cifs_mount_option_tokens = {
|
||||
{ Opt_noforcegid, "noforcegid" },
|
||||
{ Opt_noblocksend, "noblocksend" },
|
||||
{ Opt_noautotune, "noautotune" },
|
||||
{ Opt_nolease, "nolease" },
|
||||
{ Opt_hard, "hard" },
|
||||
{ Opt_soft, "soft" },
|
||||
{ Opt_perm, "perm" },
|
||||
@@ -1738,6 +1739,9 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
|
||||
case Opt_noautotune:
|
||||
vol->noautotune = 1;
|
||||
break;
|
||||
case Opt_nolease:
|
||||
vol->no_lease = 1;
|
||||
break;
|
||||
case Opt_hard:
|
||||
vol->retry = 1;
|
||||
break;
|
||||
@@ -3294,6 +3298,8 @@ static int match_tcon(struct cifs_tcon *tcon, struct smb_vol *volume_info)
|
||||
return 0;
|
||||
if (tcon->handle_timeout != volume_info->handle_timeout)
|
||||
return 0;
|
||||
if (tcon->no_lease != volume_info->no_lease)
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -3516,6 +3522,7 @@ cifs_get_tcon(struct cifs_ses *ses, struct smb_vol *volume_info)
|
||||
tcon->nocase = volume_info->nocase;
|
||||
tcon->nohandlecache = volume_info->nohandlecache;
|
||||
tcon->local_lease = volume_info->local_lease;
|
||||
tcon->no_lease = volume_info->no_lease;
|
||||
INIT_LIST_HEAD(&tcon->pending_opens);
|
||||
|
||||
spin_lock(&cifs_tcp_ses_lock);
|
||||
|
Reference in New Issue
Block a user