On 2/28/20 8:55 PM, Darrick J. Wong wrote: > On Fri, Feb 28, 2020 at 02:56:56PM +0530, Ritesh Harjani wrote: >> ext4_iomap_begin is already implemented which provides ext4_map_blocks, >> so just move the API from generic_block_bmap to iomap_bmap for iomap >> conversion. >> >> Signed-off-by: Ritesh Harjani >> Reviewed-by: Jan Kara >> --- >> fs/ext4/inode.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c >> index 6cf3b969dc86..81fccbae0aea 100644 >> --- a/fs/ext4/inode.c >> +++ b/fs/ext4/inode.c >> @@ -3214,7 +3214,7 @@ static sector_t ext4_bmap(struct address_space *mapping, sector_t block) >> return 0; >> } >> >> - return generic_block_bmap(mapping, block, ext4_get_block); >> + return iomap_bmap(mapping, block, &ext4_iomap_ops); > > /me notes that iomap_bmap will filemap_write_and_wait for you, so one > could optimize ext4_bmap to avoid the double-flush by moving the > filemap_write_and_wait at the top of the function into the JDATA state > clearing block. IIUC, delalloc and data=journal mode are both mutually exclusive. So we could get rid of calling filemap_write_and_wait() all together from ext4_bmap(). And as you pointed filemap_write_and_wait() is called by default in iomap_bmap which should cover for delalloc case. @Jan/Darrick, Could you check if the attached patch looks good. If yes then will add your Reviewed-by and send a v6. Thanks for the review!! -ritesh