This is still an early preview (RFC v2) of multi-fsblock atomic write. Since the core design of the feature looks ready, wanted to post this for some early feedback. We will break this into more smaller and meaningful patches in later revision. However to simplify the review of the core design changes, this version is limited to just two patches. Individual patches might have more details in the commit msg. Note: This overall needs more careful review (other than the core design) which I will be doing in parallel. However it would be helpful if one can provide any feedback on the core design changes. Specially around ext4_iomap_alloc() changes, ->end_io() changes and a new get block flag EXT4_GET_BLOCKS_QUERY_LEAF_BLOCKS. v1 -> v2: ========== 1. Handled review comments from Ojaswin to optimize the ext4_map_block() calls in ext4_iomap_alloc(). 2. Fixed the journal credits calculation for both: - during block allocation in ext4_iomap_alloc() - during dio completion in ->end_io callback. Earlier we were starting multiple txns in ->end_io callback for unwritten to written conversion. But since in case of atomic writes, we want a single jbd2 txn, hence made the necessary changes there. TODOs: ====== 1. although this survived quick tests and some custom fio tests for atomic write, but I still think we need to add more tests for the corner cases. Will work on adding such corner test cases to xfstests. 2. Many fsx related tests in quick group were failing with bigalloc. But those were failing even without these patches. Need further investigation. 3. Finish more thorough testing of the series. 4. Refactoring + Cleanups and a more careful review of the overall patch series before sending v3. Ritesh Harjani (IBM) (2): ext4: Add multi-fsblock atomic write support with bigalloc ext4: Add support for EXT4_GET_BLOCKS_QUERY_LEAF_BLOCKS fs/ext4/ext4.h | 9 ++ fs/ext4/extents.c | 69 ++++++++++++++ fs/ext4/file.c | 7 +- fs/ext4/inode.c | 231 ++++++++++++++++++++++++++++++++++++++++++---- fs/ext4/super.c | 8 +- 5 files changed, 302 insertions(+), 22 deletions(-) -- 2.49.0