Subject: RE: iSCSI: ordered command delivery at the target

From: Robert Snively <[email-masked]>
Date: Fri, 7 Jun 2002 13:41:44 -0700

Caution:

Device Server is a reserved keyword in SCSI.

It is the mechanism which interprets a SCSI command,
allocates data buffers, requests and performs the
data transfer, and sends appropriate completion 
information.

Those folks who are explaining that CmdSN is only
used to capture the order of delivery of commands with 
respect to other commands are correct.  The actual 
interpretation of the command, choice
of execution order, data request order, and a stack
of other things are at the whim of the Device Server,
regulated only by those ordering attributes specifically
requested by the originator of the request, the Application
Client.  Such actions are usually heavily overlapped for
different tasks and are likely to be performed out of
order.

That is why the CmdSN is not used to identify those
other actions.  Instead, the ITT is used to identify
the components of a task.

References:  SAM-2, iSCSI, SPC-2.

Bob

> I'm talking about Data-Out PDU's. CmdSN is NOT advanced
> for Data-Out PDU's, only _copied_ from the original task/command.
> 
> A task CANNOT be delivered to the device server
> without all data being available at the target,
> being the case that there could be a huge
> network (Ethernet) latency. Once all data has
> arrived, then the task is delivered to the
> device server (LL SCSI) and CmdSN becomes irrelevant.
> 
> Furthermore, CmdSN is NOT advanced on sending
> Data-Out pdu's -- it is just copied there
> from the original task/command.
> 
> The whole point of this is making
> inserting into the ``incoming'' priority
> queue ordered.
> 
> When the task is moved into a ``pending for more data'' queue,
> this would naturally make the Data-out PDUs immediate
> PDUs, as they should be. When Data-Outs arrive at the
> target, CmdSN has advanced by at least k*** since the task has been
> just _received_, and any ``older'' Data-Out PDUs (carrying 
> the same CmdSN)
> will go to the front of the ``incoming'' queue and be seen 
> immediately.
> 
> *** If k = 0, then the task is still in the ``incoming'' queue
> and the Data-Out is sorted right after it -- same effect.
> 
> Furthermore, the target will NOT allow CmdSN wrapping
> for an outstanding task (one for which data is being delivered, I->T,
> in order to be sent to the device server (SCSI), _only_ after which
> CmdSN becomes irrelevant, but this means that all data was
> delivered....).
> 
> Do you see it?
> 
> -- 
> Luben
> P.S. CmdSN wrapping MUST not depend on the choice of
> maximum data segment. The suggestion I posted preserves
> this reservation.
>