When using iSCSI PDU offload (cxgbei) on T6 adapters, a burst of
received PDUs can be reported via a single message to the driver.
Previously the driver passed these multi-PDU bursts up to the iSCSI
stack up as a single "large" PDU by rewriting the data segment lengthbuffer offset, data
segment length, and DataSN fields in the iSCSI header. While this worked, the forged
DataSN values could be used in reply messages. To avoid thisworked, allow athe forged DataSN values did not match the ExpDataSN value in
logical ithe subsequent SCSI PDU (struct icl_pdu) to describe a burst of PDUs via aResponse PDU. The initiator does not currently
new 'ip_npdus' field. Normally this field is set to zero when 'structverify this value, but the forged DataSN values prevent adding a
icl_pdu' represents a single PDU. Ifcheck.
To avoid this, allow a logical iSCSI PDU represents a burst(struct icl_pdu) to describe
of on-the-wirea burst of PDUs, then via a new 'ip_npdus' contains the count of on-the-wireadditional_pdus' field. Normally this
PDUs. The header of this "large" PDU is still modified, but thefield is set to zero when 'struct icl_pdu' represents a single PDU.
DataSN field now contains the DataSN value of the first on-the-wireIf logical PDU represents a burst of on-the-wire PDUs, then 'ip_npdus'
contains the count of additional on-the-wire PDUs. The header of this
"large" PDU is still modified, but the DataSN field now contains the
DataSN value of the first on-the-wire PDU in the burst.