Re: Return of PENDING status to SCSI driver

Ramya Desai
2009-06-15T12:07:13Z

On 6/14/09, Boaz Harrosh <bharrosh@panasas.com> wrote:
> 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
>
I am replacing the default USB mass storage driver with the one I am
developing. But I am using the default SCSI and USB stack provided by
Linux.

So is there any another way to make my driver asynchronous?

-RD