SORT BY:

LIST ORDER
THREAD
AUTHOR
SUBJECT


SEARCH

IPS HOME


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

    RE: iSCSI: Recognizing Recovery R2Ts



    One additional important note - the Recovery R2T generates
    its own data sequence, so in the following:
    
    > > Following a)
    > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=16384 DataSN=2, DataLength=8192
    > > I-> ISCSI_INIT_SCSI_DATA_OUT F_BIT, Offset=24576, DataSN=3,
    > > DataLength=8192
    > > 
    > > Following B)
    > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=16384 DataSN=2, DataLength=8192
    
    The DataSN's should be 0 and 1, not 2 and 3 (and in the B) case above,
    the F bit needs to be set, as I previously noted).  The initiator really
    does respond to a Recovery R2T in the same fashion as any other R2T.
    
    Thanks,
    --David
    
    > -----Original Message-----
    > From: Black_David@emc.com [mailto:Black_David@emc.com]
    > Sent: Sunday, September 15, 2002 9:45 PM
    > To: nickb@attheoffice.org
    > Cc: ips@ece.cmu.edu
    > Subject: RE: iSCSI: Recognizing Recovery R2Ts
    > 
    > 
    > > Im still lost here.  Please consider the example:
    > > 
    > > MaxDataSegmentLength=8192, MaxBurstLength=32768, ImmediateData=No,
    > > InitialR2T=Yes.
    > > 
    > > I-> ISCSI_INIT_SCSI_CMND, EDTL=131072, SCSI Opcode WRITE_10 
    > > T-> ISCSI_TARG_R2T, DDTL=32768, Offset=0
    > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=0, DataSN=0, DataLength=8192
    > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=8192, DataSN=1, DataLength=8192
    > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=16384, DataSN=2, 
    > DataLength=8192
    > > 
    > > (Data Payload Fails on DataSN=2)
    > > 
    > > T-> ISCSI_TARG_RJT, Reason=Data Digest (Payload) Error
    > > I-> ISCSI_INIT_SCSI_DATA_OUT, F_BIT, Offset=24576, DataSN=3,
    > > DataLength=8192
    > > 
    > > Can the Target either: (Are both of these legal?)
    > > 
    > > 	a) Accept DataSN=3 even though DataSN=2 Failed
    > > 	   Only request retransmisson of Failed DataOut
    > > 	T-> ISCSI_TARG_R2T (Recovery) DDTL=8192, Offset=16384
    > > 
    > > 	or b) Discard DataSN=3, Request retransmission of
    > > 	      all DataOut from failed to MaxBurstLength  
    > > 	T-> ISCSI_TARG_R2T (Recovery) DDTL=16384, Offset=16384
    > 
    > Yes, both are legal, a) is preferred for obvious reasons.
    > 
    > > Initiator: (This is where im confused)
    > > 	Received either a) or b),  and knows the R2T is a Recovery
    > > 	R2T because the DDTL is not 32768 (MaxBurstLength or rest of
    > > 	the original EDTL) and Offset is not 32768.
    > 
    > Not exactly.  The R2T is a recovery R2T because it requests data
    > covered by the previous R2T (Offset < 32768).  This doesn't affect
    > the initiator's behavior - it just responds to the R2T it receives.
    > 
    > > Following a)
    > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=16384 DataSN=2, DataLength=8192
    > > I-> ISCSI_INIT_SCSI_DATA_OUT F_BIT, Offset=24576, DataSN=3,
    > > DataLength=8192
    > > 
    > > Following B)
    > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=16384 DataSN=2, DataLength=8192
    > 
    > I think you flipped the a) and b) cases above, so you clearly are
    > confused :-).  In both cases, the initiator looks at the R2T to
    > determine what data the Target is asking for and sends it - a) asked
    > for 8k, b) asked for 16k.  The one PDU that responds to a) needs
    > to have the F bit set, as it completes the response to the second
    > R2T.  If the target needs to distinguish the recovery data transfer
    > from the original transfer, it should use a different Target Transfer
    > Tag in the recovery R2T.
    > 
    > > Target:
    > > 	MaxBurstLength is Completed:
    > > T-> ISCSI_TARG_R2T, Offset=32768, DDTL=32768
    > > 
    > > I-> ISCSI_INIT_SCSI_DATA_OUT, Offset=32768, DataSN=0, 
    > DataLength=8192
    > 
    > Ok.
    >  
    > > Your statement "Whether the initiator knows this depends on 
    > whether it
    > > saw the previous R2T" is still confusing to me.  The logic 
    > used in the
    > > above example (EDTL and Offset) I assume is incorrect.  
    > Would you mind
    > > elaborating with a specific example of the proper method of 
    > doing so?
    > 
    > I don't understand the problem here.  In all cases, the initiator
    > looks at the offset and length in the R2T it receives and sends the
    > data requested by that R2T.  In both cases a) and b) above, 
    > the initiator
    > can tell that it's a recovery R2T because the requested data 
    > range overlaps
    > a previous R2T.  The statement I wrote covers a completely different
    > case in which the target sends an R2T that doesn't arrive 
    > (e.g., header
    > digest error), and decides to try to recover from that.
    > 
    > I also don't understand the reference to EDTL in the command
    > (as opposed to DDTL in the R2T0.  If a Recovery R2T causes
    > more than EDTL of data to be transferred for a command that's fine -
    > the target is in charge of data flow and will tell the initiator when
    > the command was complete and how much was actually transferred
    > (consider unexpected end-of-tape on a tape device to understand
    > why this is done this way).
    > 
    > 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: Mon Sep 16 02:19:05 2002
11838 messages in chronological order