Răsfoiți Sursa

SCSI Initiator: improve log messages

Convert sense key to textual description.
For example:

-- SCSI Initiator read on target 0 failed with status -1 and sense_key 0x03 (MEDIUM_ERROR)

for drive reported medium errors.
Petteri Aimonen 10 luni în urmă
părinte
comite
00348c8263

+ 6 - 6
src/ZuluSCSI_initiator.cpp

@@ -691,7 +691,7 @@ bool scsiInitiatorReadCapacity(int target_id, uint32_t *sectorcount, uint32_t *s
     {
     {
         uint8_t sense_key;
         uint8_t sense_key;
         scsiRequestSense(target_id, &sense_key);
         scsiRequestSense(target_id, &sense_key);
-        logmsg("READ CAPACITY on target ", target_id, " failed, sense key ", sense_key);
+        scsiLogInitiatorCommandFailure("READ CAPACITY", target_id, status, sense_key);
         return false;
         return false;
     }
     }
     else
     else
@@ -748,7 +748,7 @@ bool scsiStartStopUnit(int target_id, bool start)
     {
     {
         uint8_t sense_key;
         uint8_t sense_key;
         scsiRequestSense(target_id, &sense_key);
         scsiRequestSense(target_id, &sense_key);
-        dbgmsg("START STOP UNIT on target ", target_id, " failed, sense key ", sense_key);
+        scsiLogInitiatorCommandFailure("START STOP UNIT", target_id, status, sense_key);
     }
     }
 
 
     return status == 0;
     return status == 0;
@@ -790,13 +790,13 @@ bool scsiTestUnitReady(int target_id)
             uint8_t sense_key;
             uint8_t sense_key;
             scsiRequestSense(target_id, &sense_key);
             scsiRequestSense(target_id, &sense_key);
 
 
-            if (sense_key == 6)
+            if (sense_key == UNIT_ATTENTION)
             {
             {
                 uint8_t inquiry[36];
                 uint8_t inquiry[36];
                 dbgmsg("Target ", target_id, " reports UNIT_ATTENTION, running INQUIRY");
                 dbgmsg("Target ", target_id, " reports UNIT_ATTENTION, running INQUIRY");
                 scsiInquiry(target_id, inquiry);
                 scsiInquiry(target_id, inquiry);
             }
             }
-            else if (sense_key == 2)
+            else if (sense_key == NOT_READY)
             {
             {
                 dbgmsg("Target ", target_id, " reports NOT_READY, running STARTSTOPUNIT");
                 dbgmsg("Target ", target_id, " reports NOT_READY, running STARTSTOPUNIT");
                 scsiStartStopUnit(target_id, true);
                 scsiStartStopUnit(target_id, true);
@@ -957,7 +957,7 @@ bool scsiInitiatorReadDataToFile(int target_id, uint32_t start_sector, uint32_t
         uint8_t sense_key;
         uint8_t sense_key;
         scsiRequestSense(target_id, &sense_key);
         scsiRequestSense(target_id, &sense_key);
 
 
-        logmsg("scsiInitiatorReadDataToFile: READ failed: ", status, " sense key ", sense_key);
+        scsiLogInitiatorCommandFailure("scsiInitiatorReadDataToFile command phase", target_id, status, sense_key);
         scsiHostPhyRelease();
         scsiHostPhyRelease();
         return false;
         return false;
     }
     }
@@ -1055,7 +1055,7 @@ bool scsiInitiatorReadDataToFile(int target_id, uint32_t start_sector, uint32_t
         }
         }
         else
         else
         {
         {
-            logmsg("scsiInitiatorReadDataToFile: READ failed: ", status, " sense key ", sense_key);
+            scsiLogInitiatorCommandFailure("scsiInitiatorReadDataToFile data phase", target_id, status, sense_key);
             return false;
             return false;
         }
         }
     }
     }

+ 28 - 0
src/ZuluSCSI_log_trace.cpp

@@ -331,3 +331,31 @@ void scsiLogDataOut(const uint8_t *buf, uint32_t length)
 
 
     g_OutByteCount += length;
     g_OutByteCount += length;
 }
 }
+
+static const char *get_sense_key_name(uint8_t sense_key)
+{
+    switch (sense_key)
+    {
+        case RECOVERED_ERROR:              return "RECOVERED_ERROR";
+        case NOT_READY      :              return "NOT_READY";
+        case MEDIUM_ERROR   :              return "MEDIUM_ERROR";
+        case HARDWARE_ERROR :              return "HARDWARE_ERROR";
+        case ILLEGAL_REQUEST:              return "ILLEGAL_REQUEST";
+        case UNIT_ATTENTION :              return "UNIT_ATTENTION";
+        case DATA_PROTECT   :              return "DATA_PROTECT";
+        case BLANK_CHECK    :              return "BLANK_CHECK";
+        case VENDOR_SPECIFIC:              return "VENDOR_SPECIFIC";
+        case COPY_ABORTED   :              return "COPY_ABORTED";
+        case ABORTED_COMMAND:              return "ABORTED_COMMAND";
+        case EQUAL          :              return "EQUAL";
+        case VOLUME_OVERFLOW:              return "VOLUME_OVERFLOW";
+        case MISCOMPARE     :              return "MISCOMPARE";
+        case RESERVED       :              return "RESERVED";
+        default: return "UNKNOWN";
+    }
+}
+
+void scsiLogInitiatorCommandFailure(const char *command_text, int target_id, int status, uint8_t sense_key)
+{
+    logmsg("-- ", command_text, " on target ", target_id, " failed with status ", status, " and sense_key ", sense_key, " (", get_sense_key_name(sense_key), ")");
+}

+ 2 - 1
src/ZuluSCSI_log_trace.h

@@ -30,4 +30,5 @@
 void scsiLogPhaseChange(int new_phase);
 void scsiLogPhaseChange(int new_phase);
 void scsiLogInitiatorPhaseChange(int new_phase);
 void scsiLogInitiatorPhaseChange(int new_phase);
 void scsiLogDataIn(const uint8_t *buf, uint32_t length);
 void scsiLogDataIn(const uint8_t *buf, uint32_t length);
-void scsiLogDataOut(const uint8_t *buf, uint32_t length);
+void scsiLogDataOut(const uint8_t *buf, uint32_t length);
+void scsiLogInitiatorCommandFailure(const char *command_text, int target_id, int status, uint8_t sense_key);

+ 3 - 3
src/ZuluSCSI_msc_initiator.cpp

@@ -330,7 +330,7 @@ bool init_msc_start_stop_cb(uint8_t lun, uint8_t power_condition, bool start, bo
     {
     {
         uint8_t sense_key;
         uint8_t sense_key;
         scsiRequestSense(target, &sense_key);
         scsiRequestSense(target, &sense_key);
-        logmsg("START STOP UNIT on target ", target, " failed, sense key ", sense_key);
+        scsiLogInitiatorCommandFailure("START STOP UNIT", target, status, sense_key);
     }
     }
 
 
     LED_OFF();
     LED_OFF();
@@ -504,7 +504,7 @@ int32_t init_msc_read10_cb(uint8_t lun, uint32_t lba, uint32_t offset, void* buf
         }
         }
         else
         else
         {
         {
-            logmsg("SCSI Initiator read failed: ", status, " sense key ", sense_key);
+            scsiLogInitiatorCommandFailure("SCSI Initiator read", target_id, status, sense_key);
             return -1;
             return -1;
         }
         }
     }
     }
@@ -597,7 +597,7 @@ int32_t init_msc_write10_cb(uint8_t lun, uint32_t lba, uint32_t offset, uint8_t
         }
         }
         else
         else
         {
         {
-            logmsg("SCSI Initiator write failed: ", status, " sense key ", sense_key);
+            scsiLogInitiatorCommandFailure("SCSI Initiator write", target_id, status, sense_key);
             return -1;
             return -1;
         }
         }
     }
     }