Re: Return of PENDING status to SCSI driver

Boaz Harrosh
2009-06-14T09:16:15Z

On 06/12/2009 03:54 PM, Ramya Desai wrote:
> On 6/12/09, Jeff Garzik <jeff@garzik.org> wrote:
>> Ramya Desai wrote:
>>
>>> Dear Experts,
>>>
>>> I am writing my mass storage class driver for my custom USB device.
>>> My device is capable of queuing the commands that are issued to it.
>>> So, I wanted to send the second command from my driver even before the
>>> completion of first command.
>>> To do this I wanted to return the PENDING status to the SCSI layer
>>> immediately after receiving the command.
>>>
>> Simply queue as many commands as possible to your hardware, and complete
>> them when they are done. Use can_queue or scsi_adjust_queue_depth() to set
>> queueing limits.
>>
>> Jeff
>
> I used can_queue to change the queue depth to 5, but I am not getting
> the next command until I finish (Done) the first command. I wanted the
> second command to come to my driver, even before first command
> finishes.
>
> -RD

If you are using the existing USB mass storage infrastructure then
it will not work. This is because all commands are issued from a
thread per host, which does a synchronous execution of one command
at a time. In fact it does not even have a Q, but a global one cmnd
pointer per host. And therefor sets can_queue to 1.

Are you using the existing USB infrastructure?

Boaz