Hi all, this series moves a large amount of duplicate code below btrfs_submit_bio into what I call the 'storage' layer. Instead of duplicating code to checksum, check checksums and repair and split bios in all the caller of btrfs_submit_bio (buffered I/O, direct I/O, compressed I/O, encoded I/O), the work is done one in a central place, often more optiomal and without slight changes in behavior. Once that is done the upper layers also don't need to split the bios for extent boundaries, as the storage layer can do that itself, including splitting the bios for the zone append limits for zoned I/O. The split work is inspired by an earlier series from Qu, from which it also reuses a few patches. Note that Dave commented on patch 2 to be split due to "doing multiple things at once". I've got not comment on how that should be done, except for the discussion with Josef on the previous iteration, where opting into the new functionality by the callers through a new flag would be possible, but actually making the whole series more complex and harder to bisect. I can still do that even if I think it's not very helpful, but I can't really think of any other split. A git tree is also available: git://git.infradead.org/users/hch/misc.git btrfs-bio-split Gitweb: http://git.infradead.org/users/hch/misc.git/shortlog/refs/heads/btrfs-bio-split Changes since v2: - minor rebase to latest misc-next - pick up various reviews for all patches Changes since v1: - rebased to latest btrfs/misc-next - added a new patch to remove the fs_info argument to btrfs_submit_bio - clean up the repair_one_sector calling convention a bit - don't move file_offset for ONE_ORDERED bios in btrfs_split_bio - temporarily use btrfs_zoned_get_device in alloc_compressed_bio - minor refactoring of some of the checksum helpers - split up a few patches - drop a few of the blk_status_t to int conversion for now - various whitespace fixes Diffstat: block/blk-merge.c | 3 fs/btrfs/bio.c | 547 ++++++++++++++++++++++++++++++++++++---- fs/btrfs/bio.h | 67 +--- fs/btrfs/btrfs_inode.h | 22 - fs/btrfs/compression.c | 273 +++----------------- fs/btrfs/compression.h | 3 fs/btrfs/disk-io.c | 203 +-------------- fs/btrfs/disk-io.h | 11 fs/btrfs/extent-io-tree.h | 1 fs/btrfs/extent_io.c | 556 ++++------------------------------------- fs/btrfs/extent_io.h | 31 -- fs/btrfs/file-item.c | 74 +---- fs/btrfs/file-item.h | 8 fs/btrfs/fs.h | 5 fs/btrfs/inode.c | 621 ++++++---------------------------------------- fs/btrfs/volumes.c | 115 ++------ fs/btrfs/volumes.h | 18 - fs/btrfs/zoned.c | 85 ++---- fs/btrfs/zoned.h | 16 - fs/iomap/direct-io.c | 10 include/linux/bio.h | 4 include/linux/iomap.h | 3 22 files changed, 819 insertions(+), 1857 deletions(-)