diff options
Diffstat (limited to 'drivers/message')
-rw-r--r-- | drivers/message/fusion/mptscsih.c | 19 |
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. |