SORT BY:

LIST ORDER
THREAD
AUTHOR
SUBJECT


SEARCH

IPS HOME


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

    Re: iSCSI: Reject, CmdSN, and DataSN



    Mallikurjun,
    
    I thought that my earlier comment on this was clear - but apparently it was
    not.
    The problem is real.
    There as trivial case in which a format error in a command, will force the
    window to close as the reject may be the only trafic and it does not carry
    ExpCmdSN etc.
    
    There are several things to be done (and as I mentioned earlier I fixed
    both):
    
       the reject command should carry the same updates as all others (ExpCmdSN
       etc.) - good practice anyhow
       the local fields should be updated even if the command is rejected -
       whenever possible (there is no digest error)
       The command slot should be considered filled
    
    Here is the proposed new text for 2.19
    
    1.1  Reject
    
    
       Byte /    0       |       1       |       2       |       3       |
          /              |               |               |               |
         |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|
         +---------------+---------------+---------------+---------------+
        0|1|1| 0x3f      |1| Reserved (0)                                |
         +---------------+---------------+---------------+---------------+
        4| Reserved (0)  | DataSegmentLength                             |
         +---------------+---------------+---------------+---------------+
        8/ Reserved (0)                                                  /
        +/                                                               /
         +---------------+---------------+---------------+---------------+
       24| StatSN                                                        |
         +---------------+---------------+---------------+---------------+
       28| ExpCmdSN                                                      |
         +---------------+---------------+---------------+---------------+
       32| MaxCmdSN                                                      |
         +---------------+---------------+---------------+---------------+
       26| Reserved (0)                                                  |
         +---------------+---------------+---------------+---------------+
       40| Reason        | Reserved (0)  | First Bad Byte or Rsvd(0)     |
         +---------------+---------------+---------------+---------------+
       44| Reserved (0)                                                  |
         +---------------+---------------+---------------+---------------+
       48| Digests if any...                                             |
         +---------------+---------------+---------------+---------------+
       xx/ Complete Header of Bad PDU                                    /
        +/                                                               /
         +---------------+---------------+---------------+---------------+
       yy
    
    
       It may happen that a target receives a PDU with a format error (e.g.,
       inconsistent fields etc.) or a digest error (e.g., invalid payload or
       header). The target returns the header (not including digest) of the PDU
       in error as the data of the response.
    
    1.1.1     Reason
    
       The reject Reason is coded as follows:
    
          1 - Format Error
          2 - Data (payload) Digest Error
          3 - Data-SNACK Reject
          4 - Command-Retry Reject
          5 - Protocol Error (e.g., SNACK request for a status that was already
          acknowledged)
          6 - Command-in-progress
          7 - Command Replay Not Supported
          8 - Immediate Command Reject - too many immediate commands
          9 - Immediate Command Retry Reject - task not found
          10 - Bookmark rejected (old or different ITT)
          11 - command not supported in this session type
          15 - Full Feature Phase Command before login
    
       Some of the reject reasons terminate or prevent the creation of a task
       at the target and no retry is possible in those cases. Format error for
       a command, Command Retry Reject and Full Feature Phase Command before
       login are in this category.
    
       In all the cases in which creation of a SCSI task is prevented or a SCSI
       task is terminated because of the reject, the target must issue a proper
       SCSI command response including a Check Condition Status (0x02). The
       sense key to be used is iSCSI REJECT (the numeric value and format for
       additional-sense-data to be coordinated with T10).  If the error is
       detected while data from the initiator is still expected (the command
       PDU did not contain all the data and the target has not received a Data
       PDU with the final bit Set) the target MUST wait until it receives the
       Data PDU with the F bit set before sending the Response PDU.
    
       In all the cases in which the rejected PDU is a non-retry numbered
       request PDU with a valid CmdSN field that number MUST be considered as
       received and acknowledged appropriately.
    
    
    Julo
    
    "Mallikarjun C." <cbm@rose.hp.com> on 28-07-2001 22:32:41
    
    Please respond to cbm@rose.hp.com
    
    To:   mbakke@cisco.com
    cc:   ips@ece.cmu.edu
    Subject:  Re: iSCSI: Reject, CmdSN, and DataSN
    
    
    
    
    Mark,
    
    When you say "uses up a SN", do you mean the ExpCmdSN/ExpDataSN
    is updated?  If so, I see a problem with at least CmdSN.
    
    Let's consider commands first.  The only Reject reason code that
    I see where a target could update its ExpCmdSN is when there
    is a payload-digest error on immediate data.  In all the other
    cases, either the target doesn't care (immediate/retry/non-FFP),
    or can't know for sure (format error).  I suggest that we _not_
    advance the ExpCmdSN on immediate data digest error to give the
    initiator an opportunity to re-issue the command to preserve
    command ordering.
    
    Let's now consider data.  Again the only Reject reason code I see
    for advancing ExpDataSN is payload-digest error ("2").  Either the
    target
      (a) would generate a recovery R2T (if DataSequenceOrder was
          negotiated as "no" and target supports Within-command
          recovery), or
      (b) eventually signal a service delivery subsystem failure for
          the command (iSCSI response code 0x02).
    
    For (b), it doesn't matter if the target updates ExpDataSN or not.
    For (a) OTOH, the target should update the ExpDataSN to deal with
    the current data burst (that reminds me that I need to fix this
    in Within-command algorithms in Appendix F!).
    
    So to summarize, I think a Reject'ed CmdSN should not be considered
    as successfully received on the target.
    
    Your comments are welcome.
    --
    Mallikarjun
    
    
    Mallikarjun Chadalapaka
    Networked Storage Architecture
    Network Storage Solutions Organization
    MS 5668   Hewlett-Packard, Roseville.
    cbm@rose.hp.com
    
    
    >When a PDU is rejected, I assume that the CmdSN is still
    >updated, as well as the DataSN where applicable.  That is,
    >a rejected command still uses up a SN.  It probably wouldn't
    >hurt to state this in the reject section.
    >
    >Since the Reject response does not contain ExpCmdSN, if the
    >last command before the window is closed is rejected, the
    >initiator has to rely on prior commands completing to e-open
    >the window.  This will usually work, but what if the window
    >size is reduced to one outstanding command for some reason?
    >Any command that is rejected will close the window for good.
    >A sequence of rejected commands equal to the window size will
    >do the same.
    >
    >Any thoughts?
    >
    >--
    >Mark A. Bakke
    >Cisco Systems
    >mbakke@cisco.com
    >763.398.1054
    >
    
    
    
    
    
    


Home

Last updated: Tue Sep 04 01:04:09 2001
6315 messages in chronological order