From: Omar Sandoval <osandov@xxxxxx> Hi, This series includes several fixes, cleanups, and improvements to direct I/O and read repair. It's preparation for adding read repair to my RWF_ENCODED series [1], but it can go in independently. Patches 1 and 2 are direct I/O error handling fixes. Patch 3 is a buffered read repair fix. Patch 4 is a buffered read repair improvement. Patches 5-9 are trivial cleanups. Patch 10 converts direct I/O to use refcount_t, which would've helped catch the bug fixed by patch 1. Patches 11-14 drastically simplify the direct I/O code. Patch 15 gets unifies buffered and direct I/O read repair, which also makes direct I/O repair actually do validation for large failed reads instead of rewriting the whole thing. Overall, this is net about -400 lines of code and actually makes direct I/O more functional. Note that this series causes btrfs/142 to fail. This is a bug in the test, as it assumes that direct I/O doesn't do read validation. I'm working on a fix for the test. Christoph is cc'd for patch 3. The fix looks at the bio internals in a way that I wasn't sure was recommended, although there is precedent in the bcache code. I'd appreciate if Christoph acked that patch or suggested a better approach. This series is based on misc-next. Thanks! 1: https://lore.kernel.org/linux-fsdevel/cover.1582930832.git.osandov@xxxxxx/ Omar Sandoval (15): btrfs: fix error handling when submitting direct I/O bio btrfs: fix double __endio_write_update_ordered in direct I/O btrfs: look at full bi_io_vec for repair decision btrfs: don't do repair validation for checksum errors btrfs: clarify btrfs_lookup_bio_sums documentation btrfs: rename __readpage_endio_check to check_data_csum btrfs: make btrfs_check_repairable() static btrfs: move btrfs_dio_private to inode.c btrfs: kill btrfs_dio_private->private btrfs: convert btrfs_dio_private->pending_bios to refcount_t btrfs: put direct I/O checksums in btrfs_dio_private instead of bio btrfs: get rid of one layer of bios in direct I/O btrfs: simplify direct I/O read repair btrfs: get rid of endio_repair_workers btrfs: unify buffered and direct I/O read repair fs/btrfs/btrfs_inode.h | 30 -- fs/btrfs/ctree.h | 1 - fs/btrfs/disk-io.c | 8 +- fs/btrfs/disk-io.h | 1 - fs/btrfs/extent_io.c | 141 +++++---- fs/btrfs/extent_io.h | 19 +- fs/btrfs/file-item.c | 11 +- fs/btrfs/inode.c | 694 ++++++++++------------------------------- 8 files changed, 260 insertions(+), 645 deletions(-) -- 2.25.1
