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. The rebasing against the latest misc-next was a bit painful due to the various large cleanups, but very little logic changed, so I've kept the review tags for now, but I'd appreciated another careful round of eyes. 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 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 | 199 +------------- fs/btrfs/disk-io.h | 11 fs/btrfs/extent-io-tree.h | 1 fs/btrfs/extent_io.c | 554 +++-------------------------------------- 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 | 1 22 files changed, 817 insertions(+), 1851 deletions(-)