Linux-CIFS Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH][SMB3] allow disabling requesting of leases
@ 2019-09-12  7:01 Steve French
  2019-09-12  7:22 ` ronnie sahlberg
  0 siblings, 1 reply; 3+ messages in thread
From: Steve French @ 2019-09-12  7:01 UTC (permalink / raw)
  To: Pavel Shilovsky, CIFS

[-- Attachment #1: Type: text/plain, Size: 547 bytes --]

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 approach is more
granular (and easier for some) as Pavel had noted in a recent suggestion.

-- 
Thanks,

Steve

[-- Attachment #2: 0001-smb3-allow-disabling-requesting-leases.patch --]
[-- Type: text/x-patch, Size: 4303 bytes --]

From d359378e10ec8b4e93c57b17f18308db09fba450 Mon Sep 17 00:00:00 2001
From: Steve French <stfrench@microsoft.com>
Date: Wed, 11 Sep 2019 21:46:20 -0500
Subject: [PATCH] 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>
---
 fs/cifs/cifsfs.c   | 2 ++
 fs/cifs/cifsglob.h | 2 ++
 fs/cifs/connect.c  | 9 ++++++++-
 fs/cifs/smb2pdu.c  | 2 +-
 4 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
index c1b685072063..69601a9b29ad 100644
--- a/fs/cifs/cifsfs.c
+++ b/fs/cifs/cifsfs.c
@@ -438,6 +438,8 @@ cifs_show_options(struct seq_file *s, struct dentry *root)
 	cifs_show_security(s, tcon->ses);
 	cifs_show_cache_flavor(s, cifs_sb);
 
+	if (tcon->no_lease)
+		seq_puts(s, ",nolease");
 	if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER)
 		seq_puts(s, ",multiuser");
 	else if (tcon->ses->user_name)
diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
index ef2199913217..09b60ec5de3e 100644
--- a/fs/cifs/cifsglob.h
+++ b/fs/cifs/cifsglob.h
@@ -579,6 +579,7 @@ struct smb_vol {
 	bool noblocksnd:1;
 	bool noautotune:1;
 	bool nostrictsync:1; /* do not force expensive SMBflush on every sync */
+	bool no_lease:1;     /* disable requesting leases */
 	bool fsc:1;	/* enable fscache */
 	bool mfsymlinks:1; /* use Minshall+French Symlinks */
 	bool multiuser:1;
@@ -1090,6 +1091,7 @@ struct cifs_tcon {
 	bool need_reopen_files:1; /* need to reopen tcon file handles */
 	bool use_resilient:1; /* use resilient instead of durable handles */
 	bool use_persistent:1; /* use persistent instead of durable handles */
+	bool no_lease:1;    /* Do not request leases on files or directories */
 	__le32 capabilities;
 	__u32 share_flags;
 	__u32 maximal_access;
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index df1ccb581828..e16b6cc1e31b 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -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);
diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
index 01d5c4af2458..ce647cfdc04f 100644
--- a/fs/cifs/smb2pdu.c
+++ b/fs/cifs/smb2pdu.c
@@ -2459,7 +2459,7 @@ SMB2_open_init(struct cifs_tcon *tcon, struct smb_rqst *rqst, __u8 *oplock,
 	iov[1].iov_len = uni_path_len;
 	iov[1].iov_base = path;
 
-	if (!server->oplocks)
+	if ((!server->oplocks) || (tcon->no_lease))
 		*oplock = SMB2_OPLOCK_LEVEL_NONE;
 
 	if (!(server->capabilities & SMB2_GLOBAL_CAP_LEASING) ||
-- 
2.20.1


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH][SMB3] allow disabling requesting of leases
  2019-09-12  7:01 [PATCH][SMB3] allow disabling requesting of leases Steve French
@ 2019-09-12  7:22 ` ronnie sahlberg
       [not found]   ` <CAH2r5msD1zHubHyMjLoz=-kJUPqM=npBfMEv+bJwJh1sYWHO1Q@mail.gmail.com>
  0 siblings, 1 reply; 3+ messages in thread
From: ronnie sahlberg @ 2019-09-12  7:22 UTC (permalink / raw)
  To: Steve French; +Cc: Pavel Shilovsky, CIFS

Reviewed by me.

We need a big patch to the manpage after all these new mount options

On Thu, Sep 12, 2019 at 5:03 PM Steve French <smfrench@gmail.com> wrote:
>
> 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 approach is more
> granular (and easier for some) as Pavel had noted in a recent suggestion.
>
> --
> Thanks,
>
> Steve

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH][SMB3] allow disabling requesting of leases
       [not found]   ` <CAH2r5msD1zHubHyMjLoz=-kJUPqM=npBfMEv+bJwJh1sYWHO1Q@mail.gmail.com>
@ 2019-09-12 15:06     ` Pavel Shilovsky
  0 siblings, 0 replies; 3+ messages in thread
From: Pavel Shilovsky @ 2019-09-12 15:06 UTC (permalink / raw)
  To: Steve French; +Cc: ronnie sahlberg, CIFS

Looks good. Stable candidate?
--
Best regards,
Pavel Shilovsky

чт, 12 сент. 2019 г. в 00:59, Steve French <smfrench@gmail.com>:
>
> Agreed
>
> On Thu, Sep 12, 2019, 00:22 ronnie sahlberg <ronniesahlberg@gmail.com> wrote:
>>
>> Reviewed by me.
>>
>> We need a big patch to the manpage after all these new mount options
>>
>> On Thu, Sep 12, 2019 at 5:03 PM Steve French <smfrench@gmail.com> wrote:
>> >
>> > 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 approach is more
>> > granular (and easier for some) as Pavel had noted in a recent suggestion.
>> >
>> > --
>> > Thanks,
>> >
>> > Steve

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, back to index

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-12  7:01 [PATCH][SMB3] allow disabling requesting of leases Steve French
2019-09-12  7:22 ` ronnie sahlberg
     [not found]   ` <CAH2r5msD1zHubHyMjLoz=-kJUPqM=npBfMEv+bJwJh1sYWHO1Q@mail.gmail.com>
2019-09-12 15:06     ` Pavel Shilovsky

Linux-CIFS Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-cifs/0 linux-cifs/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-cifs linux-cifs/ https://lore.kernel.org/linux-cifs \
		linux-cifs@vger.kernel.org
	public-inbox-index linux-cifs

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-cifs


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git