|
@@ -66,6 +66,7 @@
|
|
|
|
|
|
#include "mptbase.h"
|
|
|
#include "mptscsih.h"
|
|
|
+#include "lsi/mpi_log_sas.h"
|
|
|
|
|
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
|
|
#define my_NAME "Fusion MPT SCSI Host driver"
|
|
@@ -682,8 +683,24 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
- case MPI_IOCSTATUS_SCSI_TASK_TERMINATED: /* 0x0048 */
|
|
|
case MPI_IOCSTATUS_SCSI_IOC_TERMINATED: /* 0x004B */
|
|
|
+ if ( ioc->bus_type == SAS ) {
|
|
|
+ u16 ioc_status = le16_to_cpu(pScsiReply->IOCStatus);
|
|
|
+ if (ioc_status & MPI_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE) {
|
|
|
+ u32 log_info = le32_to_cpu(mr->u.reply.IOCLogInfo);
|
|
|
+ log_info &=SAS_LOGINFO_MASK;
|
|
|
+ if (log_info == SAS_LOGINFO_NEXUS_LOSS) {
|
|
|
+ sc->result = (DID_BUS_BUSY << 16);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Allow non-SAS & non-NEXUS_LOSS to drop into below code
|
|
|
+ */
|
|
|
+
|
|
|
+ case MPI_IOCSTATUS_SCSI_TASK_TERMINATED: /* 0x0048 */
|
|
|
case MPI_IOCSTATUS_SCSI_EXT_TERMINATED: /* 0x004C */
|
|
|
/* Linux handles an unsolicited DID_RESET better
|
|
|
* than an unsolicited DID_ABORT.
|