cifs: handle "nolease" option for vers=1.0
authorKenneth D'souza <kdsouza@redhat.com>
Mon, 18 May 2020 07:31:34 +0000 (13:01 +0530)
committerSteve French <stfrench@microsoft.com>
Mon, 1 Jun 2020 05:10:17 +0000 (00:10 -0500)
The "nolease" mount option is only supported for SMB2+ mounts.
Fail with appropriate error message if vers=1.0 option is passed.

Signed-off-by: Kenneth D'souza <kdsouza@redhat.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/connect.c

index 28268ed..62503fb 100644 (file)
@@ -3580,6 +3580,16 @@ cifs_get_tcon(struct cifs_ses *ses, struct smb_vol *volume_info)
                        cifs_dbg(VFS, "cache=singleclient requested on mount but NO_CACHING flag set on share\n");
        }
 
+       if (volume_info->no_lease) {
+               if (ses->server->vals->protocol_id == 0) {
+                       cifs_dbg(VFS,
+                               "SMB2 or later required for nolease option\n");
+                       rc = -EOPNOTSUPP;
+                       goto out_fail;
+               } else
+                       tcon->no_lease = volume_info->no_lease;
+       }
+
        /*
         * We can have only one retry value for a connection to a share so for
         * resources mounted more than once to the same server share the last
@@ -3589,7 +3599,6 @@ 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);