Author: kadesai
Date: Tue Nov 29 12:55:01 2016
New Revision: 309286
URL: https://svnweb.freebsd.org/changeset/base/309286

Log:
  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.sax...@broadcom.com>
  Reviewed by:    Kashyap Desai <kashyap.de...@broadcom.com>
  MFC after:  3 days
  Sponsored by:   Broadcom Limited/AVAGO Technologies

Modified:
  head/sys/dev/mrsas/mrsas.c
  head/sys/dev/mrsas/mrsas_cam.c

Modified: head/sys/dev/mrsas/mrsas.c
==============================================================================
--- head/sys/dev/mrsas/mrsas.c  Tue Nov 29 12:53:05 2016        (r309285)
+++ head/sys/dev/mrsas/mrsas.c  Tue Nov 29 12:55:01 2016        (r309286)
@@ -1359,9 +1359,11 @@ mrsas_ioctl(struct cdev *dev, u_long cmd
        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);

Modified: head/sys/dev/mrsas/mrsas_cam.c
==============================================================================
--- head/sys/dev/mrsas/mrsas_cam.c      Tue Nov 29 12:53:05 2016        
(r309285)
+++ head/sys/dev/mrsas/mrsas_cam.c      Tue Nov 29 12:55:01 2016        
(r309286)
@@ -260,6 +260,17 @@ mrsas_action(struct cam_sim *sim, union 
        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:
                {
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to