[GIT PULL] vfs iomap

From: Christian Brauner
Date: Fri Mar 08 2024 - 05:12:55 EST


Hey Linus,

/* Summary */
This contains a few updates for the iomap code:

* Restore read-write hints in struct bio through the bi_write_hint member for
the sake of UFS devices in mobile applications. This can result in up to 40%
lower write amplification in UFS devices. The patch series that builds on
this will be coming in via the SCSI maintainers. (Bart)

* Overhaul the iomap writeback code. Afterwards ->map_blocks() is able to map
multiple blocks at once as long as they're in the same folio. This
reduces CPU usage for buffered write workloads on e.g., xfs on systems
with lots of cores. (Christoph)

* Record processed bytes in iomap_iter() trace event. (Kassey)

* Extend iomap_writepage_map() trace event after Christoph's ->map_block()
changes to map mutliple blocks at once. (Zhang)

/* Testing */
clang: Debian clang version 16.0.6 (19)
gcc: (Debian 13.2.0-7) 13.2.0

All patches are based on v6.8-rc1 and have been sitting in linux-next.
No build failures or warnings were observed.

/* Conflicts */

Merge conflicts with other trees
================================

[1] linux-next: manual merge of the scsi-mkp tree with the vfs-brauner tree
https://lore.kernel.org/linux-next/20240227153436.33b48d59@xxxxxxxxxxxxxxxx

[2] There's a merge conflict between the vfs-6.9-misc pull request sent as
https://lore.kernel.org/r/20240308-vfs-misc-a4e7c50ce769@brauner
that can be resolved like this:

diff --cc include/linux/fs.h
index 2ba751d097c1,bdabda5dc364..000000000000
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@@ -43,7 -43,7 +43,8 @@@
#include <linux/cred.h>
#include <linux/mnt_idmapping.h>
#include <linux/slab.h>
+#include <linux/maple_tree.h>
+ #include <linux/rw_hint.h>

#include <asm/byteorder.h>
#include <uapi/linux/fs.h>

Merge conflicts with mainline
=============================

The following changes since commit 6613476e225e090cc9aad49be7fa504e290dd33d:

Linux 6.8-rc1 (2024-01-21 14:11:32 -0800)

are available in the Git repository at:

git@xxxxxxxxxxxxxxxxxxx:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.9.iomap

for you to fetch changes up to 86835c39e08e6d92a9d66d51277b2676bc659743:

Merge tag 'vfs-6.9.rw_hint' of gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs (2024-03-04 18:35:21 +0100)

Please consider pulling these changes from the signed vfs-6.9.iomap tag.

Thanks!
Christian

----------------------------------------------------------------
vfs-6.9.iomap

----------------------------------------------------------------
Bart Van Assche (6):
fs: Fix rw_hint validation
fs: Verify write lifetime constants at compile time
fs: Split fcntl_rw_hint()
fs: Move enum rw_hint into a new header file
fs: Propagate write hints to the struct block_device inode
block, fs: Restore the per-bio/request data lifetime fields

Christian Brauner (1):
Merge tag 'vfs-6.9.rw_hint' of gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs

Christoph Hellwig (14):
iomap: clear the per-folio dirty bits on all writeback failures
iomap: treat inline data in iomap_writepage_map as an I/O error
iomap: move the io_folios field out of struct iomap_ioend
iomap: move the PF_MEMALLOC check to iomap_writepages
iomap: factor out a iomap_writepage_handle_eof helper
iomap: move all remaining per-folio logic into iomap_writepage_map
iomap: clean up the iomap_alloc_ioend calling convention
iomap: move the iomap_sector sector calculation out of iomap_add_to_ioend
iomap: don't chain bios
iomap: only call mapping_set_error once for each failed bio
iomap: factor out a iomap_writepage_map_block helper
iomap: submit ioends immediately
iomap: map multiple blocks at a time
iomap: pass the length of the dirty region to ->map_blocks

Kassey Li (1):
iomap: Add processed for iomap_iter

Zhang Yi (1):
iomap: add pos and dirty_len into trace_iomap_writepage_map

block/bio.c | 2 +
block/blk-crypto-fallback.c | 1 +
block/blk-merge.c | 8 +
block/blk-mq.c | 2 +
block/bounce.c | 1 +
block/fops.c | 5 +-
fs/buffer.c | 12 +-
fs/direct-io.c | 2 +
fs/f2fs/f2fs.h | 1 +
fs/fcntl.c | 64 +++--
fs/gfs2/bmap.c | 2 +-
fs/inode.c | 1 +
fs/iomap/buffered-io.c | 579 ++++++++++++++++++++++----------------------
fs/iomap/direct-io.c | 1 +
fs/iomap/trace.h | 48 +++-
fs/mpage.c | 1 +
fs/xfs/xfs_aops.c | 9 +-
fs/zonefs/file.c | 3 +-
include/linux/blk-mq.h | 2 +
include/linux/blk_types.h | 2 +
include/linux/fs.h | 16 +-
include/linux/iomap.h | 19 +-
include/linux/rw_hint.h | 24 ++
23 files changed, 455 insertions(+), 350 deletions(-)
create mode 100644 include/linux/rw_hint.h