qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 5/7] scsi: Add mapping for generic SCSI_HOST status to sense code


From: Hannes Reinecke
Subject: [PATCH 5/7] scsi: Add mapping for generic SCSI_HOST status to sense codes
Date: Mon, 16 Nov 2020 19:40:39 +0100

As we don't have a driver-specific mapping (yet) we should provide
for a detailed mapping from host_status to SCSI sense codes.

Signed-off-by: Hannes Reinecke <hare@suse.de>
---
 scsi/utils.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 55 insertions(+), 5 deletions(-)

diff --git a/scsi/utils.c b/scsi/utils.c
index 262ef1c3ea..ae68881184 100644
--- a/scsi/utils.c
+++ b/scsi/utils.c
@@ -252,6 +252,21 @@ const struct SCSISense sense_code_LUN_COMM_FAILURE = {
     .key = ABORTED_COMMAND, .asc = 0x08, .ascq = 0x00
 };
 
+/* Command aborted, LUN does not respond to selection */
+const struct SCSISense sense_code_LUN_NOT_RESPONDING = {
+    .key = ABORTED_COMMAND, .asc = 0x05, .ascq = 0x00
+};
+
+/* Command aborted, Command Timeout during processing */
+const struct SCSISense sense_code_COMMAND_TIMEOUT = {
+    .key = ABORTED_COMMAND, .asc = 0x2e, .ascq = 0x02
+};
+
+/* Command aborted, Commands cleared by device server */
+const struct SCSISense sense_code_COMMAND_ABORTED = {
+    .key = ABORTED_COMMAND, .asc = 0x2f, .ascq = 0x02
+};
+
 /* Medium Error, Unrecovered read error */
 const struct SCSISense sense_code_READ_ERROR = {
     .key = MEDIUM_ERROR, .asc = 0x11, .ascq = 0x00
@@ -568,6 +583,14 @@ int sg_io_sense_from_errno(int errno_value, struct 
sg_io_hdr *io_hdr,
         switch (errno_value) {
         case EDOM:
             return TASK_SET_FULL;
+        case EBADE:
+            return RESERVATION_CONFLICT;
+        case ENODATA:
+            *sense = SENSE_CODE(READ_ERROR);
+            return CHECK_CONDITION;
+        case EREMOTEIO:
+            *sense = SENSE_CODE(LUN_COMM_FAILURE);
+            return CHECK_CONDITION;
         case ENOMEM:
             *sense = SENSE_CODE(TARGET_FAILURE);
             return CHECK_CONDITION;
@@ -576,14 +599,41 @@ int sg_io_sense_from_errno(int errno_value, struct 
sg_io_hdr *io_hdr,
             return CHECK_CONDITION;
         }
     } else {
-        if (io_hdr->host_status == SCSI_HOST_NO_LUN ||
-            io_hdr->host_status == SCSI_HOST_BUSY ||
-            io_hdr->host_status == SCSI_HOST_TIME_OUT ||
-            (io_hdr->driver_status & SG_ERR_DRIVER_TIMEOUT)) {
+        switch (io_hdr->host_status) {
+        case SCSI_HOST_NO_LUN:
+            *sense = SENSE_CODE(LUN_NOT_RESPONDING);
+            return CHECK_CONDITION;
+        case SCSI_HOST_BUSY:
             return BUSY;
-        } else if (io_hdr->host_status) {
+        case SCSI_HOST_TIME_OUT:
+            *sense = SENSE_CODE(COMMAND_TIMEOUT);
+            return CHECK_CONDITION;
+        case SCSI_HOST_BAD_RESPONSE:
+            *sense = SENSE_CODE(LUN_COMM_FAILURE);
+            return CHECK_CONDITION;
+        case SCSI_HOST_ABORTED:
+            *sense = SENSE_CODE(COMMAND_ABORTED);
+            return CHECK_CONDITION;
+        case SCSI_HOST_RESET:
+            *sense = SENSE_CODE(RESET);
+            return CHECK_CONDITION;
+        case SCSI_HOST_TRANSPORT_DISRUPTED:
             *sense = SENSE_CODE(I_T_NEXUS_LOSS);
             return CHECK_CONDITION;
+        case SCSI_HOST_TARGET_FAILURE:
+            *sense = SENSE_CODE(TARGET_FAILURE);
+            return CHECK_CONDITION;
+        case SCSI_HOST_RESERVATION_ERROR:
+            return RESERVATION_CONFLICT;
+        case SCSI_HOST_ALLOCATION_FAILURE:
+            *sense = SENSE_CODE(SPACE_ALLOC_FAILED);
+            return CHECK_CONDITION;
+        case SCSI_HOST_MEDIUM_ERROR:
+            *sense = SENSE_CODE(READ_ERROR);
+            return CHECK_CONDITION;
+        }
+        if (io_hdr->driver_status & SG_ERR_DRIVER_TIMEOUT) {
+            return BUSY;
         } else if (io_hdr->status) {
             return io_hdr->status;
         } else if (io_hdr->driver_status & SG_ERR_DRIVER_SENSE) {
-- 
2.16.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]