aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target
diff options
context:
space:
mode:
authorRoland Dreier <roland@purestorage.com>2012-01-09 20:54:00 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-02-13 14:06:11 -0500
commit967a6f42d195569b596f9af39cd878803a0d1f8b (patch)
tree1034cc73a891871264ac17d2993d1748741f58fb /drivers/target
parentb8a8c4aa9e22c2de7af17ea48b7cc868f5bc79ad (diff)
target: Correct sense key for INVALID FIELD IN {PARAMETER LIST,CDB}
commit 9fbc8909876a2160044e71d376848973b9bfdc3f upstream. According to SPC-4, the sense key for commands that are failed with INVALID FIELD IN PARAMETER LIST and INVALID FIELD IN CDB should be ILLEGAL REQUEST (5h) rather than ABORTED COMMAND (Bh). Without this patch, a tcm_loop LUN incorrectly gives: # sg_raw -r 1 -v /dev/sda 3 1 0 0 ff 0 Sense Information: Fixed format, current; Sense key: Aborted Command Additional sense: Invalid field in cdb Raw sense data (in hex): 70 00 0b 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 While a real SCSI disk gives: Sense Information: Fixed format, current; Sense key: Illegal Request Additional sense: Invalid field in cdb Raw sense data (in hex): 70 00 05 00 00 00 00 18 00 00 00 00 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 with the main point being that the real disk gives a sense key of ILLEGAL REQUEST (5h). Signed-off-by: Roland Dreier <roland@purestorage.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/target')
-rw-r--r--drivers/target/target_core_transport.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index bb86655dd40..d3a7342317e 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -5709,8 +5709,8 @@ int transport_send_check_condition_and_sense(
5709 /* CURRENT ERROR */ 5709 /* CURRENT ERROR */
5710 buffer[offset] = 0x70; 5710 buffer[offset] = 0x70;
5711 buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10; 5711 buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10;
5712 /* ABORTED COMMAND */ 5712 /* ILLEGAL REQUEST */
5713 buffer[offset+SPC_SENSE_KEY_OFFSET] = ABORTED_COMMAND; 5713 buffer[offset+SPC_SENSE_KEY_OFFSET] = ILLEGAL_REQUEST;
5714 /* INVALID FIELD IN CDB */ 5714 /* INVALID FIELD IN CDB */
5715 buffer[offset+SPC_ASC_KEY_OFFSET] = 0x24; 5715 buffer[offset+SPC_ASC_KEY_OFFSET] = 0x24;
5716 break; 5716 break;
@@ -5718,8 +5718,8 @@ int transport_send_check_condition_and_sense(
5718 /* CURRENT ERROR */ 5718 /* CURRENT ERROR */
5719 buffer[offset] = 0x70; 5719 buffer[offset] = 0x70;
5720 buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10; 5720 buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10;
5721 /* ABORTED COMMAND */ 5721 /* ILLEGAL REQUEST */
5722 buffer[offset+SPC_SENSE_KEY_OFFSET] = ABORTED_COMMAND; 5722 buffer[offset+SPC_SENSE_KEY_OFFSET] = ILLEGAL_REQUEST;
5723 /* INVALID FIELD IN PARAMETER LIST */ 5723 /* INVALID FIELD IN PARAMETER LIST */
5724 buffer[offset+SPC_ASC_KEY_OFFSET] = 0x26; 5724 buffer[offset+SPC_ASC_KEY_OFFSET] = 0x26;
5725 break; 5725 break;