SORT BY:

LIST ORDER
THREAD
AUTHOR
SUBJECT


SEARCH

IPS HOME


    [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

    RE: Several iSCSI protocol questions



    Tony,
    
    > Section 2.1, "A SCSI task is a SCSI command or possibly a
    > linked set of SCSI commands."
    > 
    > Section 2.2.2.1, "Some iSCSI tasks are SCSI tasks, and many SCSI
    activities
    > are related to a SCSI task ([SAM2]). In all cases, the task is identified
    by
    > the Initiator Task Tag for the life of the task."
    > 
    > Does the above imply that the initiator must (or can?) use the same
    > Initiator Task Tag for all SCSI commands in a given linked set of SCSI
    > commands?  If so, then a given Initiator Task Tag may not 
    > uniquely identify a particular SCSI command.
    
    Yes, but the inference is incorrect.  SAM-2 defines "linked command" as:
    
      3.1.58 linked command: One in a series of SCSI commands processed by a
      single task that collectively make up a discrete I/O operation. In such
      a series, each command is represented by the same I_T_L_x nexus, and all,
      except the last, have the LINK bit in the CDB CONTROL byte set to one.
    
    Linked commands are always sequential, not concurrent, as they use the same
    I_T_L_x nexus - see the example in Section 5.7.2 of SAM-2.  Only one command
    from a set of linked commands is active at any point in time, and hence the
    ITT for the linked commands uniquely identifies it.  Linked commands are
    rarely used in practice, FWIW.
    
    > --- Task Management Functions ---
    > 
    > Section 9.5.1, "For all these functions, the Task Management function
    > response MUST be returned as detailed in Section 9.6 Task Management
    > Function Response."  Does this mean that a Task Management Function with
    > one of the listed functions cannot be rejected with a Reject PDU 
    > if some other field of the PDU has a value that is a protocol error?
    
    It shouldn't - if there's a protocol error, the Task Management function
    cannot be processed.
    
    > If I read the spec correctly, the ABORT TASK, ABORT TASK SET, CLEAR TASK
    > SET, and LOGICAL UNIT RESET functions operate on iSCSI tasks that:
    > 
    > 1) Have a CmdSN that is lower than the CmdSN of the Task Management
    > Function, AND
    > 2) Have a valid LUN that is equal to the LUN of the Task 
    > Management Function
    > 
    > Since the Task Management Function itself has a CmdSN and 
    > valid LUN, can one
    > Task Management Function affect (abort) another?
    
    No, SCSI task management functions operate on *SCSI* tasks, not *iSCSI*
    tasks, and a task management function is not a *SCSI* task - see SAM-2.
    
    > If not, then what is the
    > appropriate Task Management Function Response for an ABORT TASK that
    > attempts to operate on another Task Management Function?
    
    That can't happen.  The only task management function that could possibly
    attempt "to operate on another Task Management Function" is ABORT TASK, but
    it identifies the task to be aborted by an Initiator Task Tag, something
    that Task Management Functions *do not* have - see Section 9.5 of the iSCSI
    draft.
    
    Beyond this, task management functions generally succeed when the
    task set is empty.  In particular, ABORT TASK succeeds when the task to
    be aborted is not in the task set - see Section 6.2 of SAM-2.
    
    > --- AHS ---
    > 
    > Section 9.2.1.5 TotalAHSLength:
    > 
    > "Total length of all AHS header segments in four byte words including
    > padding, if any.
    > 
    > The TotalAHSLength is used only in PDUs that have an AHS and 
    > MUST be 0 in all other PDUs."
    > 
    > For the first sentence, I recommend changing the wording to 
    > emphasize the fact that the length is not in bytes (something like "... 
    > segments in unitsof four byte words ..." with an example given).  I missed
    
    > this fact the first time I read it.
    > 
    > The second sentence is confusing since it is not spelled out 
    > which PDUs have an AHS.  Is this sentence specifying a requirement
    > that some pre-defined list of PDUs that do not have an AHS MUST have
    > TotalAHSLength equal to 0, or is the sentence simply stating that a
    > nonzero TotalAHSLength implies that an AHS is present?  In the former
    > case, the list of PDUs not allowed to have an AHS can be determined
    > by looking elsewhere in the spec (Task Management
    > Function Request, Task Management Function Response, R2T, 
    > Logout Request, Logout Response).
    
    The former - whether an AHS is present is specified with each PDU
    definition.
    
    > Next question: if an AHS is present in a PDU allowing it, but 
    > the target does not know what to do with it, should the target reject 
    > the PDU or ignore the AHS?
    
    Such a target is broken (if an AHS is allowed, the target has to
    expect that it might be present and be prepared to do whatever
    is necessary), and should be fixed.
    
    > --- Reject ---
    > 
    > If a target decides to reject a non-immediate command when it 
    > can determine
    > the CmdSN of the command being rejected, should the target 
    > return the reject
    > response immediately, or should the target defer the reject 
    > response until
    > the command being rejected would have been delivered for 
    > execution based on
    > its CmdSN?
    
    Returning the Reject earlier will probably be appreciated by the
    initiator.  There's no requirement to wait.
    
    > If the CmdSN of the command being rejected is 
    > outside the valid
    > command window, should the target ignore the PDU and not 
    > return the Reject
    > response, or should the target return the Reject response 
    > anyway?
    
    Ignore it.  Section 2.2.2.1 says:
    
      For non-immediate commands, the CmdSN field can take any value from 
      ExpCmdSN to MaxCmdSN inclusive. The target MUST silently ignore any 
      non-immediate command outside of this range or non-immediate dupli-
      cates within the range. 
    
    "silently" is the key word in this text.
    
    > --- Logout ---
    > 
    > Section 9.14, "A Logout for a CID may be performed on a 
    > different transport
    > connection when the TCP connection for the CID has already 
    > been terminated."
    > Was this intended to imply that a Logout for a CID MUST be 
    > performed on the
    > same transport connection when the TCP connection for the CID 
    > has _not_
    > already been terminated?
    
    Not exactly.  The problem is that one can get into weird situations
    in which the two ends of a TCP connection have different views on
    whether it's been terminated.  If the TCP connection is alive,
    Logout for that connection should be sent on that connection.
    
    Thanks,
    --David
    ---------------------------------------------------
    David L. Black, Senior Technologist
    EMC Corporation, 42 South St., Hopkinton, MA  01748
    +1 (508) 249-6449            FAX: +1 (508) 497-8018
    black_david@emc.com       Mobile: +1 (978) 394-7754
    ---------------------------------------------------
    


Home

Last updated: Fri Aug 30 11:18:52 2002
11721 messages in chronological order