Add sanity check in IO and IOCTL path not to process command further if controller is in
HW_CRITICAL_ERROR. Submitted by: Sumit Saxena <sumit.saxena@broadcom.com> Reviewed by: Kashyap Desai <Kashyap.Desai@broadcom.com> MFC after: 3 days Sponsored by: Broadcom Limited/AVAGO Technologies
This commit is contained in:
parent
bd4ca2d76e
commit
d771891fdd
@ -1359,9 +1359,11 @@ mrsas_ioctl(struct cdev *dev, u_long cmd, caddr_t arg, int flag,
|
||||
if (!sc)
|
||||
return ENOENT;
|
||||
|
||||
if (sc->remove_in_progress) {
|
||||
if (sc->remove_in_progress ||
|
||||
(sc->adprecovery == MRSAS_HW_CRITICAL_ERROR)) {
|
||||
mrsas_dprint(sc, MRSAS_INFO,
|
||||
"Driver remove or shutdown called.\n");
|
||||
"Either driver remove or shutdown called or "
|
||||
"HW is in unrecoverable critical error state.\n");
|
||||
return ENOENT;
|
||||
}
|
||||
mtx_lock_spin(&sc->ioctl_lock);
|
||||
|
@ -260,6 +260,17 @@ mrsas_action(struct cam_sim *sim, union ccb *ccb)
|
||||
struct ccb_hdr *ccb_h = &(ccb->ccb_h);
|
||||
u_int32_t device_id;
|
||||
|
||||
/*
|
||||
* Check if the system going down
|
||||
* or the adapter is in unrecoverable critical error
|
||||
*/
|
||||
if (sc->remove_in_progress ||
|
||||
(sc->adprecovery == MRSAS_HW_CRITICAL_ERROR)) {
|
||||
ccb->ccb_h.status |= CAM_DEV_NOT_THERE;
|
||||
xpt_done(ccb);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (ccb->ccb_h.func_code) {
|
||||
case XPT_SCSI_IO:
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user