mirror of https://gitee.com/openkylin/linux.git
[SCSI] qla2xxx: Correct residual-count handling discrepancies during UNDERRUN handling.
For recent ISPs, software during CS_UNDERRUN handling must determine if the two residuals, firmware-calculated and FCP_RSP, are different to recognize if a frame has been dropped. Update the driver to catch this condition, and clear the SS_RESIDUAL_UNDER and lscsi_status bits. This logic is consistent with what earlier firmwares did by explicitly cracking open the FCP_RSP statuses and clearing SS_RESIDUAL_UNDER. Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
285d0321d1
commit
6acf819002
|
@ -1012,8 +1012,14 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
|
|||
case CS_DATA_UNDERRUN:
|
||||
resid = resid_len;
|
||||
/* Use F/W calculated residual length. */
|
||||
if (IS_FWI2_CAPABLE(ha))
|
||||
if (IS_FWI2_CAPABLE(ha)) {
|
||||
if (scsi_status & SS_RESIDUAL_UNDER &&
|
||||
resid != fw_resid_len) {
|
||||
scsi_status &= ~SS_RESIDUAL_UNDER;
|
||||
lscsi_status = 0;
|
||||
}
|
||||
resid = fw_resid_len;
|
||||
}
|
||||
|
||||
if (scsi_status & SS_RESIDUAL_UNDER) {
|
||||
scsi_set_resid(cp, resid);
|
||||
|
|
Loading…
Reference in New Issue