Message ID | 20220218195739.585044-1-shr@fb.com (mailing list archive) |
---|---|
Headers | show |
Series | Support sync buffered writes for io-uring | expand |
On Fri, Feb 18, 2022 at 11:57:26AM -0800, Stefan Roesch wrote: > This patch series adds support for async buffered writes. Currently > io-uring only supports buffered writes in the slow path, by processing > them in the io workers. With this patch series it is now possible to > support buffered writes in the fast path. To be able to use the fast > path the required pages must be in the page cache or they can be loaded > with noio. Otherwise they still get punted to the slow path. Where's the filesystem support? You need to plumb in ext4 to this bufferhead support, and add iomap/xfs support as well so we can shake out all the problems with APIs and fallback paths that are needed for full support of buffered writes via io_uring. > If a buffered write request requires more than one page, it is possible > that only part of the request can use the fast path, the resst will be > completed by the io workers. That's ugly, especially at the filesystem/iomap layer where we are doing delayed allocation and so partial writes like this could have significant extra impact. It opens up the possibility of things like ENOSPC/EDQUOT mid-way through the write instead of being an up-front error, and so there's lots more complexity in the failure/fallback paths that the io_uring infrastructure will have to handle correctly... Also, it breaks the "atomic buffered write" design of iomap/XFS where other readers and writers will only see whole completed writes and not intermediate partial writes. This is where a lot of the bugs in the DIO io_uring support were found (deadlocks, data corruptions, etc), so there's a bunch of semantic and API issues that filesystems require from io_uring that need to be sorted out before we think about merge buffered write support... Cheers, Dave.