On Thu, 2010-11-25 at 09:50 +0100, Gerd Hoffmann wrote: > On 11/25/10 09:46, Benjamin Herrenschmidt wrote: > > > So far tho, it appears that I can (at least with scsi-disk) rely on > > always been eventually called with SCSI_REASON_DONE so my code (and > > maybe the usb-msd code too, I haven't verified) relies on that to > > complete requests... Is that incorrect ? > > Yes.
Well, so far it works :-) But I suppose I must be lucky.. I must admit that it's very unclear how that SCSI "stack" is meant to be used from the HBA standpoint. Right now, I've somewhat come up with: - client request occurs - call device send_command() - if result is 0, assume my complete() was called with SCSI_REASON_DONE - else, use sign of result for transfer direction, store the absolute value as the total expected transfer len and call the device scsi_data_read()/write() and wait for complete() - when complete() is called: - if SCSI_REASON_DONE, complete client request - else perform the client "DMA" for "arg" bytes - call the device scsi_data_read()/write() again So far it seems to work with scsi-disk but maybe I miss something in which case I would very much enjoy being corrected :-) Cheers, Ben.