lkml.org 
[lkml]   [2022]   [Apr]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 723/913] Adjust cifssb maximum read size
    Date
    From: Rohith Surabattula <rohiths@microsoft.com>

    [ Upstream commit 06a466565d54a1a42168f9033a062a3f5c40e73b ]

    When session gets reconnected during mount then read size in super block fs context
    gets set to zero and after negotiate, rsize is not modified which results in
    incorrect read with requested bytes as zero. Fixes intermittent failure
    of xfstest generic/240

    Note that stable requires a different version of this patch which will be
    sent to the stable mailing list.

    Signed-off-by: Rohith Surabattula <rohiths@microsoft.com>
    Acked-by: Paulo Alcantara (SUSE) <pc@cjr.nz>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/cifs/cifsfs.c | 3 +++
    fs/cifs/file.c | 10 ++++++++++
    2 files changed, 13 insertions(+)

    diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
    index 22a1d8156220..ed220daca3e1 100644
    --- a/fs/cifs/cifsfs.c
    +++ b/fs/cifs/cifsfs.c
    @@ -210,6 +210,9 @@ cifs_read_super(struct super_block *sb)
    if (rc)
    goto out_no_root;
    /* tune readahead according to rsize if readahead size not set on mount */
    + if (cifs_sb->ctx->rsize == 0)
    + cifs_sb->ctx->rsize =
    + tcon->ses->server->ops->negotiate_rsize(tcon, cifs_sb->ctx);
    if (cifs_sb->ctx->rasize)
    sb->s_bdi->ra_pages = cifs_sb->ctx->rasize / PAGE_SIZE;
    else
    diff --git a/fs/cifs/file.c b/fs/cifs/file.c
    index 82bbaf8e92b7..b23f6b489bb9 100644
    --- a/fs/cifs/file.c
    +++ b/fs/cifs/file.c
    @@ -3734,6 +3734,11 @@ cifs_send_async_read(loff_t offset, size_t len, struct cifsFileInfo *open_file,
    break;
    }

    + if (cifs_sb->ctx->rsize == 0)
    + cifs_sb->ctx->rsize =
    + server->ops->negotiate_rsize(tlink_tcon(open_file->tlink),
    + cifs_sb->ctx);
    +
    rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize,
    &rsize, credits);
    if (rc)
    @@ -4512,6 +4517,11 @@ static int cifs_readpages(struct file *file, struct address_space *mapping,
    break;
    }

    + if (cifs_sb->ctx->rsize == 0)
    + cifs_sb->ctx->rsize =
    + server->ops->negotiate_rsize(tlink_tcon(open_file->tlink),
    + cifs_sb->ctx);
    +
    rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize,
    &rsize, credits);
    if (rc)
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-04-05 23:11    [W:4.029 / U:0.480 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site