In addition to the BPF filtering support for IO_uring that was merged on Monday, the other block device changes and IO_uring updates were also merged for the newly-opened Linux 7.0 merge window.
The block and IO_uring updates were merged to Linux 7.0 alongside that (c)BPF filtering work sent in separately. The block merge landed:
– Batch I/O dispatch for ublk to provide greater performance for the user-space block device driver framework.
– Support for integirty data for ublk along with other improvements.
– An async_depth queue attribute is added to resolve a performance regression.
– The MD code fixes a I/O hang with degraded RAD arrays with llbitmap.
– Improving the secure erase performance for some storage devices.
Meanwhile this pull added support for bounce buffering of Direct I/O for stable pages. That bounce buffering of DIO for stable pages is described as:
“This series tries to address the problem that under I/O pages can be modified during direct I/O, even when the device or file system require stable pages during I/O to calculate checksums, parity or data operations. It does so by adding block layer helpers to bounce buffer an iov_iter into a bio, then wires that up in iomap and ultimately XFS.
The reason that the file system even needs to know about it, is because reads need a user context to copy the data back, and the infrastructure to defer ioends to a workqueue currently sits in XFS. I’m going to look into moving that into ioend and enabling it for other file systems. Additionally btrfs already has it’s own infrastructure for this, and actually an urgent need to bounce buffer, so this should be useful there and could be wire up easily. In fact the idea comes from patches by Qu that did this in btrfs.
This patch fixes all but one xfstests failures on T10 PI capable devices (generic/095 seems to have issues with a mix of mmap and splice still, I’m looking into that separately), and make qemu VMs running Windows, or Linux with swap enabled fine on an XFS file on a device using PI.”
There was also the IO_uring merge separate from the cBPF filtering work. That IO_uring code brought clean-ups, improving IOPOLL by using a doubly linked list for managing completions, improved restriction setup and checking, support for a non-circular submission queue, and other improvements.
