The end of the road for kiobufs?
That sort of optimization is certainly worthwhile. The really interesting part of this patch, however, is that it shorts out the "kiobuf" layer for O_DIRECT, and for the raw block I/O devices as well. Kiobufs were initially implemented to support that sort of raw I/O; they were intended to be a generic abstraction for a collection of physical pages in I/O operations. Kiobufs have been gradually falling out of favor over the last couple of years, however, as their limitations have come to light. They are a relatively heavyweight data structure, with high setup and teardown costs. Kiobufs also break down operations into relatively small chunks which must be processed sequentially, slowing down large requests.
The direct-to-BIO patch has eliminated the original and largest use of kiobufs within the kernel. That leads to the obvious question: is it time to remove kiobufs from 2.5? The answer seems to be "yes," and some patches removing the last remaining uses of kiobufs have started appearing. Kiobufs, it seems, are on the way out.
The only gap left if kiobufs are removed would be direct I/O support for
character devices. There are devices which can benefit from direct I/O:
consider the SCSI generic layer, video devices, or high-speed tape drives.
Requests have been posted for a function which would map a userspace buffer
into a "scatterlist," a data structure representing memory which has been
set up for DMA operations. This capability would take almost all of the
pain out of supporting direct I/O in character devices; no such patch has
yet been posted, though.
