SAM and SPC directly conflict
ralphoweber at compuserve.com
Fri Nov 23 10:23:56 PST 2001
* From the T10 Reflector (t10 at t10.org), posted by:
* Ralph Weber <ralphoweber at compuserve.com>
I have found a direct conflict between SAM and SPC,
(I mean SAM-1 and SPC-1 here).
SPCr11a says: "A QErr bit of one specifies all the
blocked tasks in the task set shall be aborted when
the COMMAND TERMINATED or CHECK CONDITION status is
SAMr18 says: "A Task Abort event is one of the
following: ... An ACA condition was cleared and the
QErr bit was set to one in the Control mode page
(see the SPC standard);"
In SPC the tasks are aborted with the CHECK CONDITION
status is sent (i.e., when status is returned to the
faulted initiator). In SAM the tasks are aborted when
an ACA condition is cleared (i.e., when the CLEAR ACA
task management function is processed).
Note that this conflict has been dutifully carried
forward to the current SAM-2 and SPC-3 even though
various proposals has modified both the definition
of QErr and the SAM-2 task abort description.
On the bright side, the difference between SAM and
SPC cannot be observed from outside the target when
CA and autosense are used. Since that is becoming
the most common case, maybe any decision made here
will not matter very much.
If CA and REQUEST SENSE is used, the difference
between the two cannot be detected outside the
target unless TST=001b and QErr=01b. I hope this
is a relatively rare case, but that is another
The difference is always observable outside the
target when ACA is used, and 00-229r3 (Charles
Binford's "Task Aborted - SAM changes", which
incorporated in SAM-2 r15, Sept 2000) added
ways in which it can be observed.
Actions Taken (so far):
Because it is the smallest change, I have modified
SAM-2 r21 to match SPC (i.e., I am changed "cleared"
to "established" where it mattered).
I have rationalized this action as follows:
1) SAM never discusses what happens when a CA is
established and QErr != 00b. This is the most common
case in use in the field. Since SAM says nothing
about it, the SPC requirements apply.
There is a catch here because incorporation of
00-229r3 added specific SAM-2 wording that makes
the behavior for CA to match that of ACA.
2) I can think of only one reason for blocking
a bunch of tasks when the status is sent only
to abort them when the CLEAR ACA is sent. That
reason would be if a MODE SELECT command
changed QErr to 00b while the ACA is active.
My guess is that 0% of the initiator code out
there takes advantage of this loophole and so
no initiator software is going to be affected.
That leaves just one issue ... Have any SCSI
target implementors written their firmware to
block tasks until an ACA is cleared and then
Clearly, I am hoping that the answer to this
question is "No". If it is "Yes" for anybody
then we have something interesting to discuss
* For T10 Reflector information, send a message with
* 'info t10' (no quotes) in the message body to majordomo at t10.org
More information about the T10