• Maxim Patlasov's avatar
    fuse: enable asynchronous processing direct IO · bcba24cc
    Maxim Patlasov authored
    In case of synchronous DIO request (i.e. read(2) or write(2) for a file
    opened with O_DIRECT), the patch submits fuse requests asynchronously, but
    waits for their completions before return from fuse_direct_IO().
    
    In case of asynchronous DIO request (i.e. libaio io_submit() or a file opened
    with O_DIRECT), the patch submits fuse requests asynchronously and return
    -EIOCBQUEUED immediately.
    
    The only special case is async DIO extending file. Here the patch falls back
    to old behaviour because we can't return -EIOCBQUEUED and update i_size later,
    without i_mutex hold. And we have no method to wait on real async I/O
    requests.
    
    The patch also clean __fuse_direct_write() up: it's better to update i_size
    in its callers. Thanks Brian for suggestion.
    Signed-off-by: default avatarMaxim Patlasov <mpatlasov@parallels.com>
    Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
    bcba24cc
file.c 60.6 KB