On Tue, 2006-05-16 at 14:38 +0800, HighPoint Linux Team wrote: _req = get_req(hba); if (_req == NULL) { dprintk("hptiop_queuecmd : no free req\n"); scp->result = DID_BUS_BUSY << 16; goto cmd_done; } This should be doing a return SCSI_MLQUEUE_HOST_BUSY. DID_BUS_BUSY doesn't do the resource contention counting that you want (MLQUEUE_HOST_BUSY will wait until a command returns ... presumably freeing up resources before trying another). /* * hptiop_shutdown will flash controller cache. */ if (scp->cmnd[0] == SYNCHRONIZE_CACHE) { scp->result = DID_OK<<16; goto cmd_done; } Are you really sure you want to do this? It looks like we'll be doing this in cases where shutdown won't be called (like suspend). host->can_queue = le32_to_cpu(iop_config.max_requests); host->cmd_per_lun = le32_to_cpu(iop_config.max_requests); You might want to think about adjusting this. For the single LUN case, it's fine. For the multi-lun case it may allow commands to a single LUN to starve everything else. However, these are minor points ... I'll put the driver in and you can fix them up later. James - : send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html