Commit 9fbc8909 authored by Roland Dreier's avatar Roland Dreier Committed by Nicholas Bellinger

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: default avatarRoland Dreier <roland@purestorage.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 9db9da33
...@@ -4451,8 +4451,8 @@ int transport_send_check_condition_and_sense( ...@@ -4451,8 +4451,8 @@ int transport_send_check_condition_and_sense(
/* CURRENT ERROR */ /* CURRENT ERROR */
buffer[offset] = 0x70; buffer[offset] = 0x70;
buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10; buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10;
/* ABORTED COMMAND */ /* ILLEGAL REQUEST */
buffer[offset+SPC_SENSE_KEY_OFFSET] = ABORTED_COMMAND; buffer[offset+SPC_SENSE_KEY_OFFSET] = ILLEGAL_REQUEST;
/* INVALID FIELD IN CDB */ /* INVALID FIELD IN CDB */
buffer[offset+SPC_ASC_KEY_OFFSET] = 0x24; buffer[offset+SPC_ASC_KEY_OFFSET] = 0x24;
break; break;
...@@ -4460,8 +4460,8 @@ int transport_send_check_condition_and_sense( ...@@ -4460,8 +4460,8 @@ int transport_send_check_condition_and_sense(
/* CURRENT ERROR */ /* CURRENT ERROR */
buffer[offset] = 0x70; buffer[offset] = 0x70;
buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10; buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10;
/* ABORTED COMMAND */ /* ILLEGAL REQUEST */
buffer[offset+SPC_SENSE_KEY_OFFSET] = ABORTED_COMMAND; buffer[offset+SPC_SENSE_KEY_OFFSET] = ILLEGAL_REQUEST;
/* INVALID FIELD IN PARAMETER LIST */ /* INVALID FIELD IN PARAMETER LIST */
buffer[offset+SPC_ASC_KEY_OFFSET] = 0x26; buffer[offset+SPC_ASC_KEY_OFFSET] = 0x26;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment