target: Change default sense key of NOT_READY
authorJörn Engel <[email protected]>
Mon, 18 Mar 2013 22:30:31 +0000 (18:30 -0400)
committerNicholas Bellinger <[email protected]>
Thu, 25 Apr 2013 08:05:25 +0000 (01:05 -0700)
As the comment sais, this allows Solaris initiators to survive
intermittent errors.  The comment from someone reading the Solaris
sources seem to imply that multipathing would be broken without this
patch as well.

Signed-off-by: Joern Engel <[email protected]>
Cc: Brian Bunker <[email protected]>
Signed-off-by: Nicholas Bellinger <[email protected]>
drivers/target/target_core_transport.c

index 3243ea790eaba9ee0db1b4152ac4e3450148ecd3..493e9e589059b6e6553addfda5afdbadef3b71ea 100644 (file)
@@ -2765,8 +2765,13 @@ transport_send_check_condition_and_sense(struct se_cmd *cmd,
                /* CURRENT ERROR */
                buffer[0] = 0x70;
                buffer[SPC_ADD_SENSE_LEN_OFFSET] = 10;
-               /* ILLEGAL REQUEST */
-               buffer[SPC_SENSE_KEY_OFFSET] = ILLEGAL_REQUEST;
+               /*
+                * Returning ILLEGAL REQUEST would cause immediate IO errors on
+                * Solaris initiators.  Returning NOT READY instead means the
+                * operations will be retried a finite number of times and we
+                * can survive intermittent errors.
+                */
+               buffer[SPC_SENSE_KEY_OFFSET] = NOT_READY;
                /* LOGICAL UNIT COMMUNICATION FAILURE */
                buffer[SPC_ASC_KEY_OFFSET] = 0x08;
                break;