socsvn commit: r225189 - soc2011/oleksandr/oleksandr-head/head/sys/cam

oleksandr at FreeBSD.org oleksandr at FreeBSD.org
Wed Aug 17 12:32:29 UTC 2011


Author: oleksandr
Date: Wed Aug 17 12:32:27 2011
New Revision: 225189
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=225189

Log:
  Review the format of errors

Modified:
  soc2011/oleksandr/oleksandr-head/head/sys/cam/cam_periph.c

Modified: soc2011/oleksandr/oleksandr-head/head/sys/cam/cam_periph.c
==============================================================================
--- soc2011/oleksandr/oleksandr-head/head/sys/cam/cam_periph.c	Wed Aug 17 09:52:34 2011	(r225188)
+++ soc2011/oleksandr/oleksandr-head/head/sys/cam/cam_periph.c	Wed Aug 17 12:32:27 2011	(r225189)
@@ -1735,22 +1735,35 @@
             error_flag_ret != 0) 
                 error_flag_type = DEVSTAT_ERROR_OTHER_ERROR;
         /*
+         * If function code is equal to XPT_SCSI_IO it means that the  
+         * error information can be found in the structure sense_data.
+         */
+        if (ccb->ccb_h.func_code == XPT_SCSI_IO && error_flag_ret != 0) {
+                int sense_key, error_code, asc, ascq;
+                scsi_extract_sense(&ccb->csio.sense_data, 
+                                   &error_code, &sense_key, &asc, &ascq);
+                switch(sense_key) {
+                case SSD_KEY_RECOVERED_ERROR:
+                        error_flag_sense = DEVSTAT_ERROR_RECOVERED;
+                        break;
+                case SSD_KEY_NOT_READY: 
+                        error_flag_sense = DEVSTAT_ERROR_NOT_READY;
+                        break;
+                case SSD_KEY_MEDIUM_ERROR:
+                        error_flag_sense = DEVSTAT_ERROR_MEDIUM_ERROR;
+                        break;
+                case SSD_KEY_HARDWARE_ERROR: 
+                        error_flag_sense = DEVSTAT_ERROR_HARDWARE;
+                        break;
+                case SSD_KEY_ILLEGAL_REQUEST: 
+                        error_flag_sense = DEVSTAT_ERROR_ILLEGAL_REQ;
+                        break;
+                }
+        }
+        /*
          * If an error is present, search for an appropriate structure 
          * in devstat and increase the corresponding counter of errors.
          */
-        int sense_key, error_code, asc, ascq;
-        scsi_extract_sense(&ccb->csio.sense_data, 
-                           &error_code, &sense_key, &asc, &ascq);
-        if (sense_key == SSD_KEY_RECOVERED_ERROR && error_flag_ret != 0)
-                error_flag_sense = DEVSTAT_ERROR_RECOVERED;
-        if (sense_key == SSD_KEY_NOT_READY && error_flag_ret != 0)
-                error_flag_sense = DEVSTAT_ERROR_NOT_READY;
-        if (sense_key == SSD_KEY_MEDIUM_ERROR && error_flag_ret != 0)
-                error_flag_sense = DEVSTAT_ERROR_MEDIUM_ERROR;
-        if (sense_key == SSD_KEY_HARDWARE_ERROR && error_flag_ret != 0)
-                error_flag_sense = DEVSTAT_ERROR_HARDWARE;
-        if (sense_key == SSD_KEY_ILLEGAL_REQUEST && error_flag_ret != 0)
-                error_flag_sense = DEVSTAT_ERROR_ILLEGAL_REQ;
         if (error_flag_ret) {
                if ((device_error = devstat_search(
                             ccb->ccb_h.path->periph->periph_name,


More information about the svn-soc-all mailing list