• Eric Biggers's avatar
    f2fs: use iomap for direct I/O · a1e09b03
    Eric Biggers authored
    Make f2fs_file_read_iter() and f2fs_file_write_iter() use the iomap
    direct I/O implementation instead of the fs/direct-io.c one.
    
    The iomap implementation is more efficient, and it also avoids the need
    to add new features and optimizations to the old implementation.
    
    This new implementation also eliminates the need for f2fs to hook bio
    submission and completion and to allocate memory per-bio.  This is
    because it's possible to correctly update f2fs's in-flight DIO counters
    using __iomap_dio_rw() in combination with an implementation of
    iomap_dio_ops::end_io() (as suggested by Christoph Hellwig).
    
    When possible, this new implementation preserves existing f2fs behavior
    such as the conditions for falling back to buffered I/O.
    
    This patch has been tested with xfstests by running 'gce-xfstests -c
    f2fs -g auto -X generic/017' with and without this patch; no regressions
    were seen.  (Some tests fail both before and after.  generic/017 hangs
    both before and after, so it had to be excluded.)
    Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
    [Jaegeuk Kim: use spin_lock_bh for f2fs_update_iostat in softirq]
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    a1e09b03
file.c 115 KB