Subject: Re: SCSI network
To: Eduardo E. Horvath <eeh@one-o.com>
From: Ian Dall <ian@beware.dropbear.id.au>
List: tech-kern
Date: 10/16/1999 06:03:07
eeh@one-o.com (Eduardo E. Horvath) writes:

> > a) Symmetrically. This is easiest. Both ends act as initiators and targets.
> >    Data is always sent with a "write" command. The hard bit comes when
> >    you want to handle a target which is not ready. You could just drop
> >    the packet and expect tcp to fix it up, or you could
> >    disconnect. Supporting disconnect would be quite a lot of extra
> >    work but is undoubtedly the best.
> 
> Since the target drives the bus cycles, the target could always hang
> the bus until it has a buffer ready.

You could, but it would be a horrible thing to do unless the bus was
not used for anything else.

> From the target side disconnect is not
> all that difficult.  It's only a pain from the initiator.

And all(?) our initiators already do disconnect.

> > b) Asymmetrically. I think an asymmetric configuration could be done by
> >    the host issuing a read command, the target disconnects until it
> >    has something.  If the host wants to send something before the read
> >    is complete, it either aborts the read command (using an abort
> >    message) or you implement support for multiple outstanding commands
> >    (tagged queueing) at both ends. You would only do this if one end
> >    had hardware it was particularly difficult to do target mode for.
> 
> The problem with this solution is that target devices cannot initiate
> transfers, so your initiator will need to poll constantly to determine
> if your target has anything to say.

Not what I would call polling. You issue a read, the target disconnects
until it has something to send. Whenever a read is complete a new read
is issued. So, there is always a read in progress, but you do not have to
continuously issue reads when there is no data and when there is data
you get interrupted (by the select) so you don't have to wait for a polling
interval to expire.

As I said, this is not the preferred solution. Most of the work I
estimate is in the machine independent middle layer and once it is
written you may as well use it at both ends. Still, there may be SCSI
adaptors which have a complete initiator implementation, including
reselection (after disconnect) but simply don't support target mode.

Ian