Re: [PATCH] target: Correct sense key for INVALID FIELD IN {PARAMETER LIST,CDB}

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

 



On Fri, 2012-01-06 at 16:54 -0800, Roland Dreier wrote:
> From: Roland Dreier <roland@xxxxxxxxxxxxxxx>
> 
> 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@xxxxxxxxxxxxxxx>
> ---
>  drivers/target/target_core_transport.c |    8 ++++----
>  1 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
> index 0257658..de5bf6a 100644
> --- a/drivers/target/target_core_transport.c
> +++ b/drivers/target/target_core_transport.c
> @@ -4397,16 +4397,16 @@ int transport_send_check_condition_and_sense(
>  	case TCM_INVALID_CDB_FIELD:
>  		/* CURRENT ERROR */
>  		buffer[offset] = 0x70;
> -		/* ABORTED COMMAND */
> -		buffer[offset+SPC_SENSE_KEY_OFFSET] = ABORTED_COMMAND;
> +		/* ILLEGAL REQUEST */
> +		buffer[offset+SPC_SENSE_KEY_OFFSET] = ILLEGAL_REQUEST;
>  		/* INVALID FIELD IN CDB */
>  		buffer[offset+SPC_ASC_KEY_OFFSET] = 0x24;
>  		break;
>  	case TCM_INVALID_PARAMETER_LIST:
>  		/* CURRENT ERROR */
>  		buffer[offset] = 0x70;
> -		/* ABORTED COMMAND */
> -		buffer[offset+SPC_SENSE_KEY_OFFSET] = ABORTED_COMMAND;
> +		/* ILLEGAL REQUEST */
> +		buffer[offset+SPC_SENSE_KEY_OFFSET] = ILLEGAL_REQUEST;
>  		/* INVALID FIELD IN PARAMETER LIST */
>  		buffer[offset+SPC_ASC_KEY_OFFSET] = 0x26;
>  		break;

Good catch here.

However this does not apply to lio-core and conflicts with the following
patch:

commit b8732e859410ce41ab5608b614fd282ce4e178e5
Author: Roland Dreier <roland@xxxxxxxxxxxxxxx>
Date:   Tue Dec 13 14:55:33 2011 -0800

    target: Set additional sense length field in sense data

I've gone ahead and applied it manually, and will queue this up for
mainline for the second round of v3.3 updates.

Thanks,

--nab

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


[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux