Re: Data Digest Errors

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

 



On Tue, 2012-02-14 at 08:48 -0800, jrepac@xxxxxxxxx wrote:
> Hi Nicholas,
> I sent the trace and /var/log/messages off list. This trace is
> executed with only one command outstanding.  Here's what I see from
> the data:
> 
> 1. Error occurs on packet 69762 for a write (packet 69751) with
> Immediate Data = 0x1f70  and Expected Data Transfer Length = 0xf000.
> 2. Many prior write transactions(782)complete fine with Immediate Data
> = 0x1f60 and Expected Data transfer Length = 0xf000.
> 3. Packet 69751 is the first write using Immediate Data = 0x1f70.
> 

Ok, looking at the immediate data WRITEs in the packet capture, I still
think the DataSegmentLength values for immediate data payloads are
incorrect.

Namely the fact that the DataSegmentLength for the immediate data
payload (in some cases) is *less* than what FirstBurstLength is
negotiated during iSCSI login (see below).  It's my understanding for
Immediate data the Initiator MUST be sending the write buffer up to
min(FirstBurstLength, MaxRecvDataSegmentLength) bytes, or if the
Expected Data Transfer Length is less than that either, send the entire
WRITE buffer as immediate data payload.

I'm getting this MUST from RFC-3720, section 10.3.4.  Expected Data
Transfer Length:

   If the Expected Data Transfer Length is higher than the
   FirstBurstLength (the negotiated maximum amount of unsolicited data
   the target will accept), the initiator MUST send the maximum amount
   of unsolicited data OR ONLY the immediate data, if any.

So following the packet capture and your observations above, the MSFT
Emulex offload initiator is generating the following packets (some have
been left out for simplicity):

Packet 68786: Immediate data length 8032 bytes (0x1f60), EDTL = 61440
bytes (0xf000) -> target DataDigest PASS
Packet 69016: Immediate data length 4096 bytes (0x1000), EDTL = 4096
bytes (0x1000) -> target DataDigest Pass
Packet 69056: Immediate data length 8032 bytes (0x1f60), EDTL = 61440
bytes (0xf000) -> target DataDigest PASS
Packet 69237: Immediate data length 4096 bytes (0x1000), EDTL = 4096
bytes (0x1000) -> target DataDigest PASS
Packet 69277: Immediate data length 8032 bytes (0x1f60), EDTL = 61440
bytes (0xf000) -> target DataDigest PASS
Packet 69350: Immediate data length 8032 bytes (0x1f60), EDTL = 49152
bytes (0xc000) -> target DataDigest PASS
Packet 69439: Immediate data length 4096 bytes (0x1000), EDTL = 4096
bytes (0x1000) -> target DataDigest PASS
Packet 69751: Immediate data length 8048 bytes (0x1f70), EDTL = 61440
bytes (0xf000) -> target DataDigest FAIL

So taking a quick look at iscsi_target.c:iscsit_handle_immediate_data(),
I don't see a reason why 8048 bytes of immediate data payload is failing
the data digest checks, while 8032 byte payloads would be passing here..

> I will start varying the InitialR2T, ImmediateData, FirstBurstLength,
> MaxBurstLength and MaxRecvDataSegmentLength keys.   
> 
> 

So looking at the Login parameter negotiation, I see the following key
values being set:

ImmediateData=Yes
InitialR2T=Yes
FirstBurstLength=8192
MaxBurstLength=262144
MaxRecvDataSegmentLength=65536

So it might be worthwhile to try increasing FirstBurstLength to 65536 to
see if that makes the initiator honor the proper Immediate Data lengths
(eg: up to FirstBurstLength).  Otherwise disabling immediate data
operation with ImmedidateData=No seems like it would likely work-around
the problem.

I would still recommend to try to fix this sub FirstBurstLength
immediate data lengths on the initiator side, as according to my
interpretation this is not is following rfc-3720, and I dont recall see
any other initiators (in practice) doing this..

> No digest testing was performed with the initiator in a Linux system
> though I did do long duration login/logout tests there with 512
> targets.  I moved to Windows to do Iometer testing and did not see any
> issues with no digest.  I could not even initialize the drive with
> both digests enabled.  This is what I am using as a test case.
> Another thing I need to try is doing a data integrity test with digest
> disabled under Windows.
> 

Ok, I was just curious if this was something you could reproduce with
offloaded enabled on Linux clients as well.

I also notice you're using a unh-iol TargetName for your testing.  Have
you tested with the old unh-target, and does something similar occur
with ImmediateData data digest payload failures too..?

Thanks Joe!

--nab

--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux