summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason King <jason.king@joyent.com>2017-11-11 02:01:59 +0000
committerJason King <jason.king@joyent.com>2017-11-29 04:10:35 +0000
commitc7c8ca597136a95fbb79b6cebca1cc1a33c636e5 (patch)
treea1177a66630ff9177f064e997c8f8c01637bae96
parentd34c3f35352d3d27e8f1c35be3da4cb32b1486db (diff)
downloadillumos-joyent-OS-6473.tar.gz
OS-6473 mptsas_smp_start may return the wrong error code & should log IOCLogInfoOS-6473
-rw-r--r--usr/src/uts/common/io/scsi/adapters/mpt_sas/mptsas.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/usr/src/uts/common/io/scsi/adapters/mpt_sas/mptsas.c b/usr/src/uts/common/io/scsi/adapters/mpt_sas/mptsas.c
index e5c42dae3e..e572bbaf86 100644
--- a/usr/src/uts/common/io/scsi/adapters/mpt_sas/mptsas.c
+++ b/usr/src/uts/common/io/scsi/adapters/mpt_sas/mptsas.c
@@ -16372,7 +16372,9 @@ static int mptsas_smp_start(struct smp_pkt *smp_pkt)
}
/* do passthrough success, check the smp status */
if (LE_16(rep.IOCStatus) != MPI2_IOCSTATUS_SUCCESS) {
- switch (LE_16(rep.IOCStatus)) {
+ uint16_t status = LE_16(rep.IOCStatus) & MPI2_IOCSTATUS_MASK;
+
+ switch (status) {
case MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE:
smp_pkt->smp_pkt_reason = ENODEV;
break;
@@ -16383,11 +16385,18 @@ static int mptsas_smp_start(struct smp_pkt *smp_pkt)
smp_pkt->smp_pkt_reason = EIO;
break;
default:
- mptsas_log(mpt, CE_NOTE, "smp_start: get unknown ioc"
- "status:%x", LE_16(rep.IOCStatus));
+ mptsas_log(mpt, CE_NOTE,
+ "smp_start: get unknown iocstatus: %hx", status);
smp_pkt->smp_pkt_reason = EIO;
break;
}
+
+ if (LE_16(rep.IOCStatus) &
+ MPI2_IOCSTATUS_FLAG_LOG_INFO_AVAILABLE) {
+ mptsas_log(mpt, CE_NOTE, "smp_start: loginfo %x",
+ LE_32(rep.IOCLogInfo));
+ }
+
return (DDI_FAILURE);
}
if (rep.SASStatus != MPI2_SASSTATUS_SUCCESS) {