On Mon 14-10-19 19:52:18, Matthew Bobrowski wrote: > On Mon, Oct 14, 2019 at 10:26:01AM +0200, Jan Kara wrote: > > Original motivation: > > > > when doing the ext4 conversion of direct IO code to iomap, we found it very > > difficult to handle inode extension with what iomap code currently provides. > > Ext4 wants to do inode extension as sync IO (so that the whole duration of > > IO is protected by inode->i_rwsem), also we need to truncate blocks beyond > > end of file in case of error or short write. Now in ->end_io handler we don't > > have the information how long originally the write was (to judge whether we > > may have allocated more blocks than we actually used) and in ->write_iter > > we don't know whether / how much of the IO actually succeeded in case of AIO. > > > > Thinking about it for some time I think iomap code makes it unnecessarily > > complex for the filesystem in case it decides it doesn't want to perform AIO > > and wants to fall back to good old synchronous IO. In such case it is much > > easier for the filesystem if it just gets normal error return from > > iomap_dio_rw() and not just -EIOCBQUEUED. > > > > The first patch in the series adds argument to iomap_dio_rw() to wait for IO > > completion (internally iomap_dio_rw() already supports this!) and the second > > patch converts XFS waiting for unaligned DIO write to this new API. > > Ah, wonderful, I was waiting for this to come through. > > I'll rebase my EXT4 direct I/O port on top of these patches and apply > the discussed changes. Any objections? :) No, go ahead. Thanks! Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR