diff options
| author | Jason King <jason.king@joyent.com> | 2017-11-11 02:01:59 +0000 |
|---|---|---|
| committer | Jason King <jason.king@joyent.com> | 2017-11-29 04:10:35 +0000 |
| commit | c7c8ca597136a95fbb79b6cebca1cc1a33c636e5 (patch) | |
| tree | a1177a66630ff9177f064e997c8f8c01637bae96 | |
| parent | d34c3f35352d3d27e8f1c35be3da4cb32b1486db (diff) | |
| download | illumos-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.c | 15 |
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) { |
