• Amir Goldstein's avatar
    fuse: implement passthrough for mmap · fda0b98e
    Amir Goldstein authored
    An mmap request for a file open in passthrough mode, maps the memory
    directly to the backing file.
    
    An mmap of a file in direct io mode, usually uses cached mmap and puts
    the inode in caching io mode, which denies new passthrough opens of that
    inode, because caching io mode is conflicting with passthrough io mode.
    
    For the same reason, trying to mmap a direct io file, while there is
    a passthrough file open on the same inode will fail with -ENODEV.
    
    An mmap of a file in direct io mode, also needs to wait for parallel
    dio writes in-progress to complete.
    
    If a passthrough file is opened, while an mmap of another direct io
    file is waiting for parallel dio writes to complete, the wait is aborted
    and mmap fails with -ENODEV.
    
    A FUSE server that uses passthrough and direct io opens on the same inode
    that may also be mmaped, is advised to provide a backing fd also for the
    files that are open in direct io mode (i.e. use the flags combination
    FOPEN_DIRECT_IO | FOPEN_PASSTHROUGH), so that mmap will always use the
    backing file, even if read/write do not passthrough.
    Signed-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
    fda0b98e
passthrough.c 7.84 KB