This SILI bit (suppress incorrect length indicator) is defined only for SSC READ(6) and READ(16) commands. For other device types bit is part of LBA field. In the current implementation, it is not checked whether the logical unit is a SSC device. Added code for checking the LU type is SSC for SILI bit in READ_6 and READ_16 CDB Signed-off-by: Nagalakshmi Nandigama <nagalakshmi.nandigama@xxxxxxx> CC: stable@xxxxxxxxxxxxxxx --- diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c index 0c3ced7..266bb14 100644 --- a/drivers/message/fusion/mptscsih.c +++ b/drivers/message/fusion/mptscsih.c @@ -827,13 +827,16 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr) * DID_SOFT_ERROR is set. */ if (ioc->bus_type == SPI) { - if ((pScsiReq->CDB[0] == READ_6 && ((pScsiReq->CDB[1] & 0x02) == 0)) || - pScsiReq->CDB[0] == READ_10 || - pScsiReq->CDB[0] == READ_12 || - (pScsiReq->CDB[0] == READ_16 && - ((pScsiReq->CDB[1] & 0x02) == 0)) || - pScsiReq->CDB[0] == VERIFY || - pScsiReq->CDB[0] == VERIFY_16) { + if ((pScsiReq->CDB[0] == READ_6 && + ((pScsiReq->CDB[1] & 0x02) == 0) && + (sc->device->type == TYPE_TAPE)) || + pScsiReq->CDB[0] == READ_10 || + pScsiReq->CDB[0] == READ_12 || + (pScsiReq->CDB[0] == READ_16 && + ((pScsiReq->CDB[1] & 0x02) == 0) && + (sc->device->type == TYPE_TAPE)) || + pScsiReq->CDB[0] == VERIFY || + pScsiReq->CDB[0] == VERIFY_16) { if (scsi_bufflen(sc) != xfer_cnt) { sc->result = -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html