Asynchronous I/O moves forward
One piece is this patch which adds "synchronous IOCBs" to the mix. One might wonder why an asynchronous I/O infrastructure needs I/O control blocks which have a synchronous option. The answer is that the synchronous IOCB is needed to achieve the goal of making most or all low-level I/O operations in the kernel be asynchronous. Once the I/O primitives expect an IOCB, and they work in an asynchronous mode, it is easy to layer the older, synchronous versions on top through the use of a synchronous IOCB. For now, synchronous IOCBs are only used in the generic_file_read() function.
The next step, perhaps, is this patch from
Badari Pulavarty; which reworks the direct I/O (DIO) infrastructure. The
DIO code handles direct operations on block devices - such as when a
"raw" device is used, or when a file is opened with the O_DIRECT
option. The DIO operations, with this patch, are all asynchronous, with
synchronous IOCBs used when synchronous behavior is required. With this
change, the task of making the block I/O subsystem be asynchronous
internally is nearly complete. Other subsystems (i.e. char devices,
networking) remain to be converted over to the AIO scheme, however.
