[PATCH] scsi_io_completion: extend description of default host-byte handling

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

 



replace "unhandled error code" message in scsi_io_completion default
host-byte condition with a descriptive message of what the host-byte
indicates.  The descriptive messages for the host bytes were derived
from the corresponding comments for the DID_HOST_ definitions in scsi.h.

Also softened the corresponding default sense code message.

Signed-off-by: Rob Evers <revers@xxxxxxxxxx>
---
 drivers/scsi/constants.c |   45 ++++++++++++++++++++++++++++++++++++++++++++-
 drivers/scsi/scsi_lib.c  |    4 ++--
 include/scsi/scsi_dbg.h  |    1 +
 3 files changed, 47 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/constants.c b/drivers/scsi/constants.c
index 450e011..900333c 100644
--- a/drivers/scsi/constants.c
+++ b/drivers/scsi/constants.c
@@ -1422,9 +1422,52 @@ static const char * const hostbyte_table[]={
 "DID_OK", "DID_NO_CONNECT", "DID_BUS_BUSY", "DID_TIME_OUT", "DID_BAD_TARGET",
 "DID_ABORT", "DID_PARITY", "DID_ERROR", "DID_RESET", "DID_BAD_INTR",
 "DID_PASSTHROUGH", "DID_SOFT_ERROR", "DID_IMM_RETRY", "DID_REQUEUE",
-"DID_TRANSPORT_DISRUPTED", "DID_TRANSPORT_FAILFAST" };
+"DID_TRANSPORT_DISRUPTED", "DID_TRANSPORT_FAILFAST", "DID_TARGET_FAILURE",
+"DID_NEXUS_FAILURE" };
 #define NUM_HOSTBYTE_STRS ARRAY_SIZE(hostbyte_table)
 
+/*
+ * derived from comments following 'Host byte codes' in scsi.h
+ */
+static char *hostbyte_table_ext_msg[] = {
+	"No Error",
+	"Couldn't connect before timeout period",
+	"Bus stayed busy through timeout period",
+	"Timed out for other reason",
+	"Bad target",
+	"Abort for some other reason",
+	"Parity Error",
+	"Internal Error",
+	"Reset",
+	"Interrupt that is not expected",
+	"Force command past mid-layer",
+	"Low level driver requests a retry",
+	"Retry immediately, don't decrement retry count",
+	"Requeue command, not immediate, don't decrement retry count",
+	"Transport disrupted, driver blocked port to recover link, transport class will retry or fail the IO",
+	"Transport class fastfailed the IO",
+	"Permanent target failure, don't retry other paths",
+	"Permanent nexus failure, retry on other paths may yield different results"
+};
+#define NUM_HOSTBYTE_EXT_MSG_STRS ARRAY_SIZE(hostbyte_table_ext_msg)
+
+#endif
+
+char *
+scsi_ext_host_byte_msg(unsigned char index)
+{
+#ifdef CONFIG_SCSI_CONSTANTS
+	if (index < NUM_HOSTBYTE_EXT_MSG_STRS)
+		return hostbyte_table_ext_msg[index];
+	else
+		return NULL;
+#else
+	return NULL;
+#endif
+}
+EXPORT_SYMBOL(scsi_ext_host_byte_msg);
+
+#ifdef CONFIG_SCSI_CONSTANTS
 static const char * const driverbyte_table[]={
 "DRIVER_OK", "DRIVER_BUSY", "DRIVER_SOFT",  "DRIVER_MEDIA", "DRIVER_ERROR",
 "DRIVER_INVALID", "DRIVER_TIMEOUT", "DRIVER_HARD", "DRIVER_SENSE"};
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index fc3f168..8e17824 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -920,12 +920,12 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
 			action = ACTION_FAIL;
 			break;
 		default:
-			description = "Unhandled sense code";
+			description = "Default sense code handling";
 			action = ACTION_FAIL;
 			break;
 		}
 	} else {
-		description = "Unhandled error code";
+		description = scsi_ext_host_byte_msg(host_byte(result));
 		action = ACTION_FAIL;
 	}
 
diff --git a/include/scsi/scsi_dbg.h b/include/scsi/scsi_dbg.h
index e89844c..61f3ee2 100644
--- a/include/scsi/scsi_dbg.h
+++ b/include/scsi/scsi_dbg.h
@@ -15,6 +15,7 @@ extern void scsi_print_sense(char *, struct scsi_cmnd *);
 extern void __scsi_print_sense(const char *name,
 			       const unsigned char *sense_buffer,
 			       int sense_len);
+extern char *scsi_ext_host_byte_msg(unsigned char);
 extern void scsi_show_result(int);
 extern void scsi_print_result(struct scsi_cmnd *);
 extern void scsi_print_status(unsigned char);
-- 
1.7.4.2

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux