Before the patch is applied block I/O requests are queued one at a time holding the global spin lock, io_request_lock. Once the patch is applied, SCSI requests are queued while holding the lock specific to the queue associated with the request. Requests that are made to different devices are queued concurrently, and requests that are made to the same device are queued serially.

You can download the I/O request patch from Sourceforge at http://sourceforge.net/projects/lse/io. The latest version is sior1-v1.2416. Patches that enable concurrent queuing for specific drivers are also available at SourceForge. The patch for the Emulex SCSI/FC is lpfc_sior1-v0.249 and the patch for Adaptec SCSI is aic_sior1-v0.249.

The I/O request lock patch installs concurrent queuing capability into the SCSI midlayer. Concurrent queuing is
activated for each SCSI adapter device driver. To activate the driver, the concurrent_queue field in the Scsi_Host_Template structure must be set when the driver is registered.

Drivers that activate concurrent queuing must ensure that any access of the request_queue by the driver is protected by the request_queue.queue_lock.