lkml.org 
[lkml]   [2020]   [Mar]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 19/20] fuse: Take inode lock for dax inode truncation
    Date
    When a file is opened with O_TRUNC, we need to make sure that any other
    DAX operation is not in progress. DAX expects i_size to be stable.

    In fuse_iomap_begin() we check for i_size at multiple places and we expect
    i_size to not change.

    Another problem is, if we setup a mapping in fuse_iomap_begin(), and
    file gets truncated and dax read/write happens, KVM currently hangs.
    It tries to fault in a page which does not exist on host (file got
    truncated). It probably requries fixing in KVM.

    So for now, take inode lock. Once KVM is fixed, we might have to
    have a look at it again.

    Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
    ---
    fs/fuse/file.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/fs/fuse/file.c b/fs/fuse/file.c
    index 561428b66101..8b264fcb9b3c 100644
    --- a/fs/fuse/file.c
    +++ b/fs/fuse/file.c
    @@ -483,7 +483,7 @@ int fuse_open_common(struct inode *inode, struct file *file, bool isdir)
    int err;
    bool is_wb_truncate = (file->f_flags & O_TRUNC) &&
    fc->atomic_o_trunc &&
    - fc->writeback_cache;
    + (fc->writeback_cache || IS_DAX(inode));

    err = generic_file_open(inode, file);
    if (err)
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-03-04 18:02    [W:2.261 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site