A.1.4.3 Queueing SCSI Requests

While it is possible for a SCSI class driver to set up internal queues for IRPs, it is seldom necessary to do so and likely to degrade the driver's performance as well because the SCSI port driver already maintains driver-created, LU-specific device queues for IRPs. Whether a particular HBA supports SCSI-II tagged queueing or not, SCSI class drivers can send every request to their devices as each IRP comes in and rely on the system-supplied port driver or the HBA to handle queued requests expeditiously.

When certain SCSI errors occur, the system port driver freezes the appropriate LU-specific queue and notifies the class driver. For more information about handling errors and releasing frozen request queues, see Sections A.1.5.1, A.1.5.2, and A.1.5.3.

If an HBA supports tagged queueing, as indicated in the returned IO_SCSI_CAPABILITIES data, the class driver uses the QueueAction member of the SRBs it creates to control how its requests are queued.