lkml.org 
[lkml]   [2021]   [Sep]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 139/144] fuse: flush extending writes
    Date
    From: Miklos Szeredi <mszeredi@redhat.com>

    commit 59bda8ecee2ffc6a602b7bf2b9e43ca669cdbdcd upstream.

    Callers of fuse_writeback_range() assume that the file is ready for
    modification by the server in the supplied byte range after the call
    returns.

    If there's a write that extends the file beyond the end of the supplied
    range, then the file needs to be extended to at least the end of the range,
    but currently that's not done.

    There are at least two cases where this can cause problems:

    - copy_file_range() will return short count if the file is not extended
    up to end of the source range.

    - FALLOC_FL_ZERO_RANGE | FALLOC_FL_KEEP_SIZE will not extend the file,
    hence the region may not be fully allocated.

    Fix by flushing writes from the start of the range up to the end of the
    file. This could be optimized if the writes are non-extending, etc, but
    it's probably not worth the trouble.

    Fixes: a2bc92362941 ("fuse: fix copy_file_range() in the writeback case")
    Fixes: 6b1bdb56b17c ("fuse: allow fallocate(FALLOC_FL_ZERO_RANGE)")
    Cc: <stable@vger.kernel.org> # v5.2
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    fs/fuse/file.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/fs/fuse/file.c
    +++ b/fs/fuse/file.c
    @@ -3188,7 +3188,7 @@ fuse_direct_IO(struct kiocb *iocb, struc

    static int fuse_writeback_range(struct inode *inode, loff_t start, loff_t end)
    {
    - int err = filemap_write_and_wait_range(inode->i_mapping, start, end);
    + int err = filemap_write_and_wait_range(inode->i_mapping, start, -1);

    if (!err)
    fuse_sync_writes(inode);

    \
     
     \ /
      Last update: 2021-09-13 15:28    [W:4.080 / U:0.252 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site