aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/message/fusion/mptscsih.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c
index c8a9d8e8c5de..bc099651df73 100644
--- a/drivers/message/fusion/mptscsih.c
+++ b/drivers/message/fusion/mptscsih.c
@@ -66,6 +66,7 @@
66 66
67#include "mptbase.h" 67#include "mptbase.h"
68#include "mptscsih.h" 68#include "mptscsih.h"
69#include "lsi/mpi_log_sas.h"
69 70
70/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 71/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
71#define my_NAME "Fusion MPT SCSI Host driver" 72#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)
682 } 683 }
683 break; 684 break;
684 685
685 case MPI_IOCSTATUS_SCSI_TASK_TERMINATED: /* 0x0048 */
686 case MPI_IOCSTATUS_SCSI_IOC_TERMINATED: /* 0x004B */ 686 case MPI_IOCSTATUS_SCSI_IOC_TERMINATED: /* 0x004B */
687 if ( ioc->bus_type == SAS ) {
688 u16 ioc_status = le16_to_cpu(pScsiReply->IOCStatus);
689 if (ioc_status & MPI_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE) {
690 u32 log_info = le32_to_cpu(mr->u.reply.IOCLogInfo);
691 log_info &=SAS_LOGINFO_MASK;
692 if (log_info == SAS_LOGINFO_NEXUS_LOSS) {
693 sc->result = (DID_BUS_BUSY << 16);
694 break;
695 }
696 }
697 }
698
699 /*
700 * Allow non-SAS & non-NEXUS_LOSS to drop into below code
701 */
702
703 case MPI_IOCSTATUS_SCSI_TASK_TERMINATED: /* 0x0048 */
687 case MPI_IOCSTATUS_SCSI_EXT_TERMINATED: /* 0x004C */ 704 case MPI_IOCSTATUS_SCSI_EXT_TERMINATED: /* 0x004C */
688 /* Linux handles an unsolicited DID_RESET better 705 /* Linux handles an unsolicited DID_RESET better
689 * than an unsolicited DID_ABORT. 706 * than an unsolicited DID_ABORT.