So far, in SCSI architecture, only commands (i.e., tasks) have tags (called "task tags"), not task management functions.  The "Nexus" argument to a task management function refers to the affected nexus (I_T, I_T_L, or I_T_L_Q) and is not a representation of the task management function itself.
 
Every modern SCSI protocol does provide tags for its task management functions:
a) SAS: all task management functions, first sent by the initiator port in the TASK frame TAG field
b) FCP: task management functions except for ABORT TASK, first sent by the initiator port in the FCP_CMND frame OX_ID field
c) iSCSI: all task management functions, first sent by the initiator port in the Task Management Function Request PDU Initiator Task Tag field
d) SRP: all task management functions, first sent by the initiator port in the SRP_TSK_MGMT request TAG field
e) ADT: first sent by the initiator port in the Task Management IU frame header's X_ORIGIN bit and EXCHANGE ID field
 
(Note that Fibre Channel ABORT TASK is the one case where the task management function does not have a tag of its own.  It latches on to the tag of the task that is being aborted. QUERY TASK is also being mapped as an exception)
 
These protocols all pull the TMF tag values from the same number space as the SCSI task tag values.  However, these values are not recognized anywhere in the SCSI architecture.  Maybe SAM-4 or SAM-5 will formally recognize this in the SCSI architecture, but it hasn't happened yet.
 
SAS state machines do need this tag to be communicated between layers, so in SAS-1.0 letter ballot (Feb 2003) we chose to call the tag used for TMFs an "association" based on this vague standardese in SAM-3:

"Each SCSI transport protocol shall allow a Received Task Management Function Executed confirming completion of the requested task to be associated with the corresponding Send Task Management Request."

In SAS TASK frames, the TAG field maps to the the Association argument for all the TMFs.  For ABORT TASK and QUERY TASK, the TAG OF TASK TO BE MANAGED field corresponds to the I_T_L_Q Nexus argument; it is unused for other TMFs.

--
Rob Elliott, elliott@hp.com
Hewlett-Packard Industry Standard Server Storage Advanced Technology
https://ecardfile.com/id/RobElliott


 


From: owner-t10@t10.org [mailto:owner-t10@t10.org] On Behalf Of Larry Chen
Sent: Monday, March 26, 2007 5:11 PM
To: T10 (t10@t10.org)
Subject: SAS-1.1 Task Frame

 

See my comments inline in RED.

 

SAS-1.1 Rev 10

 

---------------------------------

Taken from page 348:

 

The TAG field contains a value that allows the SSP initiator port to establish a context for commands and task

management functions.

For COMMAND frames and TASK frames, the SSP initiator port shall set the TAG field to a value that is unique

for the I_T nexus established by the connection (see 7.12). An SSP initiator port shall not reuse the same tag

when transmitting COMMAND frames or TASK frames to different LUNs in the same SSP target port. An SSP

initiator port may reuse a tag when transmitting frames to different SSP target ports. The TAG field in a

COMMAND frame contains the task tag defined in SAM-3. The TAG field in a TASK frame does not

correspond to a SAM-3 task tag, but corresponds to an SAM-3 association (see 10.2.1). The tag space used

in the TAG fields is shared across COMMAND frames and TASK frames (e.g., if a tag is used for a COMMAND

frame, it is not also used for a concurrent TASK frame).

 

[comment #1: The TAG field in the TASK frame does not correspond to a SAM-3 task tag, but corresponds to

an SAM-3 association (see 10.2.1).

 

This seems odd and contradicts everything I know about Q Tags. Also, SAM-3 does not mention about association

i.e., SAS-1.1 association instead.

]

 

---------------------------------

Taken from page 415:

 

Task Management Request Received (IN (Nexus, Function Identifier, [Association]))

 

[comment #2: Association is optional.

 

If Association == TAG OF TASK TO BE MANAGED field then this would make sense since

 

TAG FO TASK TO BE MANAGED is only meaningful for ABORT_TASK and QUERY_TASK.

]

 

Taken from Table 161 on page 416:

 

Nexus

I_T_L nexus or I_T_L_Q nexus (depending on the Function Identifier), where:

a) I indicates the initiator port that sent the TASK frame;

b) T indicates the target port that received the TASK frame;

c) L indicated by the LOGICAL UNIT NUMBER field in the TASK frame header; and

d) Q (for an I_T_L_Q nexus) indicated by the TAG OF TASK TO BE MANAGED field in

the TASK frame header.

 

[Association] Indicates the TAG field in the TASK frame header.

 

[Comment #3: d) Q (for an I_T_l_Q nexus indicated by the TAG OF TASK TO BE MANAGED field

In the TASK frame header.

 

Should this be revised to … ?

 

indicated by the TAG field in the TASK frame header.

 

].

 

[Comment #4: [Association] Indicates the TAG field in the TASK frame header.

 

Should this be revised to …?

 

[Association] Indicates the TAG OF TASK OT BE MANAGED field in the TASK frame.

 

]