lkml.org 
[lkml]   [2018]   [May]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 33/62] ceph: fix rsize/wsize capping in ceph_direct_read_write()
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Ilya Dryomov <idryomov@gmail.com>

    commit 3a15b38fd2efc1d648cb33186bf71e9138c93491 upstream.

    rsize/wsize cap should be applied before ceph_osdc_new_request() is
    called. Otherwise, if the size is limited by the cap instead of the
    stripe unit, ceph_osdc_new_request() would setup an extent op that is
    bigger than what dio_get_pages_alloc() would pin and add to the page
    vector, triggering asserts in the messenger.

    Cc: stable@vger.kernel.org
    Fixes: 95cca2b44e54 ("ceph: limit osd write size")
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: "Yan, Zheng" <zyan@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/ceph/file.c | 10 +++++-----
    1 file changed, 5 insertions(+), 5 deletions(-)

    --- a/fs/ceph/file.c
    +++ b/fs/ceph/file.c
    @@ -873,6 +873,11 @@ ceph_direct_read_write(struct kiocb *ioc
    size_t start = 0;
    ssize_t len;

    + if (write)
    + size = min_t(u64, size, fsc->mount_options->wsize);
    + else
    + size = min_t(u64, size, fsc->mount_options->rsize);
    +
    vino = ceph_vino(inode);
    req = ceph_osdc_new_request(&fsc->client->osdc, &ci->i_layout,
    vino, pos, &size, 0,
    @@ -888,11 +893,6 @@ ceph_direct_read_write(struct kiocb *ioc
    break;
    }

    - if (write)
    - size = min_t(u64, size, fsc->mount_options->wsize);
    - else
    - size = min_t(u64, size, fsc->mount_options->rsize);
    -
    len = size;
    pages = dio_get_pages_alloc(iter, len, &start, &num_pages);
    if (IS_ERR(pages)) {

    \
     
     \ /
      Last update: 2018-05-14 09:15    [W:4.155 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site