• Amir Goldstein's avatar
    fuse: fix wrong ff->iomode state changes from parallel dio write · 4864a6dd
    Amir Goldstein authored
    There is a confusion with fuse_file_uncached_io_{start,end} interface.
    These helpers do two things when called from passthrough open()/release():
    1. Take/drop negative refcount of fi->iocachectr (inode uncached io mode)
    2. State change ff->iomode IOM_NONE <-> IOM_UNCACHED (file uncached open)
    
    The calls from parallel dio write path need to take a reference on
    fi->iocachectr, but they should not be changing ff->iomode state, because
    in this case, the fi->iocachectr reference does not stick around until file
    release().
    
    Factor out helpers fuse_inode_uncached_io_{start,end}, to be used from
    parallel dio write path and rename fuse_file_*cached_io_{start,end} helpers
    to fuse_file_*cached_io_{open,release} to clarify the difference.
    
    Fixes: 205c1d80 ("fuse: allow parallel dio writes with FUSE_DIRECT_IO_ALLOW_MMAP")
    Signed-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
    4864a6dd
file.c 83.3 KB