Change the mps(4) and mpr(4) drivers to decrement the CCB retry count when
they receive a "terminated ioc" type error.
Revision 218812 changed mps(4) to unconditionally retry these types of
errors, in the belief that they always reflected transient transport-related
errors. But some Seagate SMR drives cause both mpr and mps controllers to
persistently return these types of errors. Retrying indefinitely can
So, instead of returning CAM_REQUEUE_REQ, return CAM_REQ_CMP_ERR. This will
tell the CAM error recovery code to decrement the retry count, so the probe
will fail and move on. We're taking the risk of false drive failures when
we run into topology issues, but that's better than blocking the boot due to
a drive failure.
sys/dev/mpr/mpr_sas.c,
sys/dev/mps/mps_sas.c:
In mprsas_scsiio_complete() and mpssas_scsiio_complete(), return
CAM_REQ_CMP_ERROR for LSI's status values
MPI2_IOCSTATUS_SCSI_IOC_TERMINATED and
MPI2_IOCSTATUS_SCSI_EXT_TERMINATED. Add comments explaining the
reasons and the tradeoff.