linux/fs/f2fs
Eric Biggers a1e09b03e6 f2fs: use iomap for direct I/O
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: Eric Biggers <ebiggers@google.com>
[Jaegeuk Kim: use spin_lock_bh for f2fs_update_iostat in softirq]
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2021-12-10 15:48:30 -08:00
..
acl.c vfs: add rcu argument to ->get_acl() callback 2021-08-18 22:08:24 +02:00
acl.h vfs: add rcu argument to ->get_acl() callback 2021-08-18 22:08:24 +02:00
checkpoint.c f2fs: support fault injection for dquot_initialize() 2021-10-29 10:38:53 -07:00
compress.c f2fs: compress: reduce one page array alloc and free when write compressed page 2021-11-17 11:28:22 -08:00
data.c f2fs: use iomap for direct I/O 2021-12-10 15:48:30 -08:00
debug.c f2fs: convert S_IRUGO to 0444 2021-08-17 11:59:05 -07:00
dir.c f2fs: support fault injection for f2fs_kmem_cache_alloc() 2021-08-17 11:59:05 -07:00
extent_cache.c f2fs: support fault injection for f2fs_kmem_cache_alloc() 2021-08-17 11:59:05 -07:00
f2fs.h f2fs: use iomap for direct I/O 2021-12-10 15:48:30 -08:00
file.c f2fs: use iomap for direct I/O 2021-12-10 15:48:30 -08:00
gc.c f2fs: introduce fragment allocation mode mount option 2021-10-26 14:04:30 -07:00
gc.h f2fs: introduce gc_merge mount option 2021-03-30 18:48:56 -07:00
hash.c f2fs: Handle casefolding with Encryption 2020-12-02 22:00:21 -08:00
inline.c f2fs: support fault injection for dquot_initialize() 2021-10-29 10:38:53 -07:00
inode.c f2fs: do not expose unwritten blocks to user by DIO 2021-12-04 10:53:33 -08:00
iostat.c f2fs: use iomap for direct I/O 2021-12-10 15:48:30 -08:00
iostat.h f2fs: introduce periodic iostat io latency traces 2021-08-23 10:25:51 -07:00
Kconfig f2fs: implement iomap operations 2021-12-04 10:53:35 -08:00
Makefile f2fs: separate out iostat feature 2021-08-23 10:25:51 -07:00
namei.c f2fs: support fault injection for dquot_initialize() 2021-10-29 10:38:53 -07:00
node.c f2fs: set SBI_NEED_FSCK flag when inconsistent node block found 2021-09-20 16:29:00 -07:00
node.h f2fs: introduce excess_dirty_threshold() 2021-09-20 16:12:51 -07:00
recovery.c f2fs: support fault injection for dquot_initialize() 2021-10-29 10:38:53 -07:00
segment.c f2fs: invalidate META_MAPPING before IPU/DIO write 2021-11-09 08:16:34 -08:00
segment.h f2fs: introduce fragment allocation mode mount option 2021-10-26 14:04:30 -07:00
shrinker.c f2fs: avoid race condition for shrinker count 2020-12-03 00:59:26 -08:00
super.c Update to zstd-1.4.10 2021-11-13 15:32:30 -08:00
sysfs.c f2fs: introduce fragment allocation mode mount option 2021-10-26 14:04:30 -07:00
verity.c f2fs: support fault injection for dquot_initialize() 2021-10-29 10:38:53 -07:00
xattr.c f2fs: support fault injection for dquot_initialize() 2021-10-29 10:38:53 -07:00
xattr.h f2fs: code cleanup by removing ifdef macro surrounding 2020-05-26 18:56:10 -07:00