Subject: iSCSI ABORT TASK RefCmdSN question

From: "Tony Battersby" <[email-masked]>
Date: Fri, 30 Aug 2002 09:02:46 -0400

(Sorry if this message is a duplicate.  I sent it once before but I don't
think it got through.)

Suppose an iSCSI target receives an ABORT TASK Task Management Function that
does not refer to a valid task (i.e. the Referenced Task Tag does not match
any task at the target) but the CmdSN is inside the valid window and matches
a non-immediate command that has not yet been delivered for execution.  For
example,

Target's ExpCmdSN is 10.
Target has a queued non-immediate command with CmdSN 11 and Initiator Task
Tag of 55 which has not been delivered for execution because the target is
waiting for a non-immediate command with CmdSN 10 first.
Target receives an immediate ABORT TASK Task Management Function with
Referenced Task Tag of 66 and RefCmdSN of 11.

The relevent portion of the spec is in Section 9.6.1:

"b) if the Referenced Task Tag does not identify an existing task but if the
CmdSN indicated by the RefCmdSN field in the Task Management function
request is within the valid CmdSN window (between MaxCmdSN and ExpCmdSN),
targets must consider the CmdSN received and return the "Function complete"
response."

It seems to me that the intention of the phrase "targets must consider the
CmdSN received" is to force the target to discard the command with CmdSN ==
RefCmdSN if the target receives it later, which would effectively abort the
command before it is received.  In my example, the command with CmdSN ==
RefCmdSN is already received, but it is not aborted since the Referenced
Task Tag does not match the Initiator Task Tag.  According to the above
text, the target is still supposed to return the "Function complete"
response.  Wouldn't it be better to return "Task does not exist" instead, or
maybe some other error?

Anthony J. Battersby
Cybernetics