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? :) --<M>--