This series makes f2fs implement direct I/O using iomap_dio_rw() instead of __blockdev_direct_IO(). In order to do this, it adds f2fs_iomap_ops, since this is the first use of iomap in f2fs. The iomap direct I/O implementation is more efficient than the fs/direct-io.c implementation. Switching to iomap also avoids the need to add new features and optimizations to the old implementation. E.g., see https://lore.kernel.org/r/20200710053406.GA25530@xxxxxxxxxxxxx and https://lore.kernel.org/r/YKJBWClI7sUeABDs@xxxxxxxxxxxxx. In general, this series preserves existing f2fs behavior (such as the conditions for falling back to buffered I/O) and is only an implementation change. Patches 1-5 contain cleanups and fixes for f2fs_file_write_iter(). Patch 6 adds f2fs_iomap_ops, patch 7 and 8 switch direct I/O reads and writes to iomap, and patch 9 removes obsoleted code. Careful review is appreciated, as I'm not an expert in all areas here. This series has been tested with xfstests by running 'gce-xfstests -c f2fs -g auto -X generic/017' with and without this series; no regressions were seen. (Some tests fail both before and after. generic/017 hangs both before and after, so it had to be excluded.) This series applies to v5.14-rc1. Eric Biggers (9): f2fs: make f2fs_write_failed() take struct inode f2fs: remove allow_outplace_dio() f2fs: rework write preallocations f2fs: reduce indentation in f2fs_file_write_iter() f2fs: fix the f2fs_file_write_iter tracepoint f2fs: implement iomap operations f2fs: use iomap for direct I/O reads f2fs: use iomap for direct I/O writes f2fs: remove f2fs_direct_IO() fs/f2fs/Kconfig | 1 + fs/f2fs/data.c | 286 +++++++------------------ fs/f2fs/f2fs.h | 29 +-- fs/f2fs/file.c | 416 +++++++++++++++++++++++++++++------- include/trace/events/f2fs.h | 12 +- 5 files changed, 421 insertions(+), 323 deletions(-) base-commit: e73f0f0ee7541171d89f2e2491130c7771ba58d3 -- 2.32.0