static struct cifs_tcon *
 cifs_get_tcon(struct cifs_ses *ses, struct smb3_fs_context *ctx)
 {
-       int rc, xid;
        struct cifs_tcon *tcon;
+       bool nohandlecache;
+       int rc, xid;
 
        tcon = cifs_find_tcon(ses, ctx);
        if (tcon) {
                goto out_fail;
        }
 
-       if (ses->server->capabilities & SMB2_GLOBAL_CAP_DIRECTORY_LEASING)
-               tcon = tcon_info_alloc(true);
+       if (ses->server->dialect >= SMB20_PROT_ID &&
+           (ses->server->capabilities & SMB2_GLOBAL_CAP_DIRECTORY_LEASING))
+               nohandlecache = ctx->nohandlecache;
        else
-               tcon = tcon_info_alloc(false);
+               nohandlecache = true;
+       tcon = tcon_info_alloc(!nohandlecache);
        if (tcon == NULL) {
                rc = -ENOMEM;
                goto out_fail;
        }
+       tcon->nohandlecache = nohandlecache;
 
        if (ctx->snapshot_time) {
                if (ses->server->vals->protocol_id == 0) {
        tcon->nocase = ctx->nocase;
        tcon->broken_sparse_sup = ctx->no_sparse;
        tcon->max_cached_dirs = ctx->max_cached_dirs;
-       if (ses->server->capabilities & SMB2_GLOBAL_CAP_DIRECTORY_LEASING)
-               tcon->nohandlecache = ctx->nohandlecache;
-       else
-               tcon->nohandlecache = true;
        tcon->nodelete = ctx->nodelete;
        tcon->local_lease = ctx->local_lease;
        INIT_LIST_HEAD(&tcon->pending_opens);