lkml.org 
[lkml]   [2020]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 556/639] btrfs: use correct count in btrfs_file_write_iter()
    Date
    From: Omar Sandoval <osandov@fb.com>

    [ Upstream commit c09767a8960ca0500fb636bf73686723337debf4 ]

    generic_write_checks() may modify iov_iter_count(), so we must get the
    count after the call, not before. Using the wrong one has a couple of
    consequences:

    1. We check a longer range in check_can_nocow() for nowait than we're
    actually writing.
    2. We create extra hole extent maps in btrfs_cont_expand(). As far as I
    can tell, this is harmless, but I might be missing something.

    These issues are pretty minor, but let's fix it before something more
    important trips on it.

    Fixes: edf064e7c6fe ("btrfs: nowait aio support")
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: Omar Sandoval <osandov@fb.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/btrfs/file.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
    index 78490e544c91e..c2c93fe9d7fd5 100644
    --- a/fs/btrfs/file.c
    +++ b/fs/btrfs/file.c
    @@ -1895,7 +1895,7 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb,
    bool sync = (file->f_flags & O_DSYNC) || IS_SYNC(file->f_mapping->host);
    ssize_t err;
    loff_t pos;
    - size_t count = iov_iter_count(from);
    + size_t count;
    loff_t oldsize;
    int clean_page = 0;

    @@ -1917,6 +1917,7 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb,
    }

    pos = iocb->ki_pos;
    + count = iov_iter_count(from);
    if (iocb->ki_flags & IOCB_NOWAIT) {
    /*
    * We will allocate space in case nodatacow is not set,
    --
    2.20.1


    \
     
     \ /
      Last update: 2020-01-24 12:33    [W:3.934 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site