cifs: fix rsize/wsize to be negotiated values
authorSteve French <stfrench@microsoft.com>
Tue, 15 Dec 2020 19:28:50 +0000 (13:28 -0600)
committerSteve French <stfrench@microsoft.com>
Tue, 15 Dec 2020 21:13:59 +0000 (15:13 -0600)
Also make sure these are displayed in /proc/mounts

Signed-off-by: Steve French <stfrench@microsoft.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
fs/cifs/cifsfs.c
fs/cifs/connect.c

index a19387fe8b47492146e204276294165bcfb0c2ec..4c9e12b468105ccdcbea8edf0d8d4d375a189817 100644 (file)
@@ -621,12 +621,9 @@ cifs_show_options(struct seq_file *s, struct dentry *root)
                           from_kgid_munged(&init_user_ns,
                                            cifs_sb->ctx->backupgid));
 
-       if (cifs_sb->ctx->got_rsize)
-               seq_printf(s, ",rsize=%u", cifs_sb->ctx->rsize);
-       if (cifs_sb->ctx->got_wsize)
-               seq_printf(s, ",wsize=%u", cifs_sb->ctx->wsize);
-       if (cifs_sb->ctx->got_bsize)
-               seq_printf(s, ",bsize=%u", cifs_sb->ctx->bsize);
+       seq_printf(s, ",rsize=%u", cifs_sb->ctx->rsize);
+       seq_printf(s, ",wsize=%u", cifs_sb->ctx->wsize);
+       seq_printf(s, ",bsize=%u", cifs_sb->ctx->bsize);
        if (tcon->ses->server->min_offload)
                seq_printf(s, ",esize=%u", tcon->ses->server->min_offload);
        seq_printf(s, ",echo_interval=%lu",
index de747ee40e878fd8d97d25cb22ab14d46fcaf160..64a41b32fbb1a91d941b96a5bd521bc8bb5a313f 100644 (file)
@@ -2859,10 +2859,14 @@ static int mount_get_conns(struct smb3_fs_context *ctx, struct cifs_sb_info *cif
 
        /*
         * Clamp the rsize/wsize mount arguments if they are too big for the server
+        * and set the rsize/wsize to the negotiated values if not passed in by
+        * the user on mount
         */
-       if (cifs_sb->ctx->wsize > server->ops->negotiate_wsize(tcon, ctx))
+       if ((cifs_sb->ctx->wsize == 0) ||
+           (cifs_sb->ctx->wsize > server->ops->negotiate_wsize(tcon, ctx)))
                cifs_sb->ctx->wsize = server->ops->negotiate_wsize(tcon, ctx);
-       if (cifs_sb->ctx->rsize > server->ops->negotiate_rsize(tcon, ctx))
+       if ((cifs_sb->ctx->rsize == 0) ||
+           (cifs_sb->ctx->rsize > server->ops->negotiate_rsize(tcon, ctx)))
                cifs_sb->ctx->rsize = server->ops->negotiate_rsize(tcon, ctx);
 
        return 0;