aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target
diff options
context:
space:
mode:
authorRoland Dreier <roland@purestorage.com>2012-01-09 20:54:00 -0500
committerNicholas Bellinger <nab@linux-iscsi.org>2012-01-18 03:30:05 -0500
commit9fbc8909876a2160044e71d376848973b9bfdc3f (patch)
tree4db778e4d91bb64460e0aa0bdfa4d9ea83cbea21 /drivers/target
parent9db9da332250dbe662995703a4dcdd692112f0c3 (diff)
target: Correct sense key for INVALID FIELD IN {PARAMETER LIST,CDB}
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> Cc: <stable@vger.kernel.org> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.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 289bc0f125f9..2869fb7d2c05 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -4451,8 +4451,8 @@ int transport_send_check_condition_and_sense(
4451 /* CURRENT ERROR */ 4451 /* CURRENT ERROR */
4452 buffer[offset] = 0x70; 4452 buffer[offset] = 0x70;
4453 buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10; 4453 buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10;
4454 /* ABORTED COMMAND */ 4454 /* ILLEGAL REQUEST */
4455 buffer[offset+SPC_SENSE_KEY_OFFSET] = ABORTED_COMMAND; 4455 buffer[offset+SPC_SENSE_KEY_OFFSET] = ILLEGAL_REQUEST;
4456 /* INVALID FIELD IN CDB */ 4456 /* INVALID FIELD IN CDB */
4457 buffer[offset+SPC_ASC_KEY_OFFSET] = 0x24; 4457 buffer[offset+SPC_ASC_KEY_OFFSET] = 0x24;
4458 break; 4458 break;
@@ -4460,8 +4460,8 @@ int transport_send_check_condition_and_sense(
4460 /* CURRENT ERROR */ 4460 /* CURRENT ERROR */
4461 buffer[offset] = 0x70; 4461 buffer[offset] = 0x70;
4462 buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10; 4462 buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10;
4463 /* ABORTED COMMAND */ 4463 /* ILLEGAL REQUEST */
4464 buffer[offset+SPC_SENSE_KEY_OFFSET] = ABORTED_COMMAND; 4464 buffer[offset+SPC_SENSE_KEY_OFFSET] = ILLEGAL_REQUEST;
4465 /* INVALID FIELD IN PARAMETER LIST */ 4465 /* INVALID FIELD IN PARAMETER LIST */
4466 buffer[offset+SPC_ASC_KEY_OFFSET] = 0x26; 4466 buffer[offset+SPC_ASC_KEY_OFFSET] = 0x26;
4467 break; 4467 break;