Hi! OK, so I think we're now coming very close to having this patch series ready, if not already there. I've made some slight amendments to this patch series as a result of the last round of feedback. This patch series is based off Darrick's iomap-for-next branch, as there are some iomap API changes there that we're dependent on here. Changes since v5: - Fixed up calling into __generic_file_fsync() from ext4_sync_file(). Previously this caused a recursive lock situation when the filesystem was created without a journal. - Rolled up the orphan handling code from ext4_dio_write_iter() into ext4_handle_inode_extension(). - Dropped redundant conditional statement and expression from ext4_iomap_is_delalloc(). - Fixed up a couple comments, changelogs, as well as some other really minor grammatical corrections. This patch series ports the ext4 direct I/O paths over to the iomap infrastructure. The legacy buffer_head based direct I/O implementation has subsequently been removed as it's no longer in use. The result of this change is that ext4 now uses the newer iomap framework for direct I/O read/write operations. Overall, this results in a much cleaner direct I/O implementation and keeps this code isolated from the buffer_head internals. In addition to this, a slight performance boost may be expected while using O_SYNC | O_DIRECT. The changes within this patch series have been tested via xfstests in both DAX and non-DAX modes using the various filesystem configuration options, including: 4k, dioread_nolock, nojournal. Matthew Bobrowski (11): ext4: reorder map.m_flags checks within ext4_iomap_begin() ext4: update direct I/O read lock pattern for IOCB_NOWAIT ext4: iomap that extends beyond EOF should be marked dirty ext4: move set iomap routines into a separate helper ext4_set_iomap() ext4: split IOMAP_WRITE branch in ext4_iomap_begin() into helper ext4: introduce new callback for IOMAP_REPORT ext4: introduce direct I/O read using iomap infrastructure ext4: move inode extension/truncate code out from ->iomap_end() callback ext4: move inode extension check out from ext4_iomap_alloc() ext4: update ext4_sync_file() to not use __generic_file_fsync() ext4: introduce direct I/O write using iomap infrastructure fs/ext4/ext4.h | 4 +- fs/ext4/extents.c | 11 +- fs/ext4/file.c | 387 ++++++++++++++++++++----- fs/ext4/fsync.c | 72 +++-- fs/ext4/inode.c | 714 +++++++++++----------------------------------- 5 files changed, 537 insertions(+), 651 deletions(-) -- 2.20.1