Subject: RE: iSCSI - bookmarks change

From: [email-masked]
Date: Wed, 5 Sep 2001 16:04:46 -0400

> If we simply have to have a way for a special implementation
> to do multiple outstanding text commands, we could say:
> 
>    An initiator SHOULD have only one outstanding command on
>    a connection at any given time.
> 
>    A target receiving a text command while another text command
>    is in progress on the same connection MAY reject either or
>    both commands.
> 
> Standard implementations would then have only one outstanding
> command at a time; vendor-specific implementations could have
> multiples if they wish (providing that both initiator and target
> support them).

Sorry to butt in on this, but ...

That sort of compromise leads to interoperability problems.
Either support for multiple outstanding commands is REQUIRED,
or there is REQUIRED behavior when an implementation does
this *and the Target detects it* (it's possible to overlap
commands in a fashion that the target won't detect), or
support for overlapping commands is negotiated on login
leading to one of the previous two possibilities.

The quoted text is in invitation to mismatched assumptions
between Initiator and Target and resulting interoperability
difficulties - the truly dangerous piece of Mark's text is
the unpredictable ability to reject a new command
based on existence of an old one, as it's entirely plausible
to create a situation in which no forward progress is possible.

I think Mark's original suggestion of turning the SHOULD into
a MUST (only one outstanding Text Command on a connection) is
the better course of action, possibly with an additional sentence
requiring Task Abort to work on Text commands (i.e., to abort
a text command that's using bookmarks, fire a Task Abort at
it, after that succeeds, the next Text command will also).
A target that receives a text command in the presence of an
outstanding one then rejects the second as a protocol error.

Thanks,
--David
---------------------------------------------------
David L. Black, Senior Technologist
EMC Corporation, 42 South St., Hopkinton, MA  01748
+1 (508) 435-1000 x75140     FAX: +1 (508) 497-8500
[email-masked]       Mobile: +1 (978) 394-7754
---------------------------------------------------

---

From: Mark Bakke <[email-masked]>
Date: Wed, 05 Sep 2001 15:38:17 -0500

David-

Thanks; that was the kind of response I was hoping for.
A few more comments below.

> to create a situation in which no forward progress is possible.

The text I sent would be dangerous; that was part of the point
of sending it.  If we wanted to keep the SHOULD, we would also
have to add the "MAY reject" stuff to cover the target side.
To really make this work, everyone either has to support multiple
outstanding commands or not.

> a MUST (only one outstanding Text Command on a connection) is

This is what I would prefer as well.

> outstanding one then rejects the second as a protocol error.

I'm not so sure about the task abort for bookmarks; wouldn't
it be simpler to assume the task abort on receipt of the next
text command?  I think that's what Julian had intended.  If
a command is sent, and a response (with B=1) is received, and
another command is sent, the target would silently discard any
leftover context from the first command, and perform the second.

There is another error case, however.  If a text command is
sent, and a response has not yet been received at all, and
the initiator wants to send a different command, we would need
to decide what to do.  Your method using task abort above would
work well in this situation, and we should specify what
happens.

--
Mark

-- 
Mark A. Bakke
Cisco Systems
[email-masked]
763.398.1054