On 11/25/2010 10:01 AM, Benjamin Herrenschmidt wrote: > 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 > No, this is exactly as I'm expecting the SCSI layer to work. So from the light of this the patch to scsi-generic is valid. And it really looks like papering over a bug in the lsi HBA code.
Gerd? Cheers, Hannes -- Dr. Hannes Reinecke zSeries & Storage h...@suse.de +49 911 74053 688 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: Markus Rex, HRB 16746 (AG Nürnberg)