Re: [PATCH 06/19] target: Fix data buffer size for VERIFY and WRITE AND VERIFY commands

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

 



On Thu, 2017-05-04 at 15:50 -0700, Bart Van Assche wrote:
> For VERIFY and WRITE AND VERIFY commands the size of the SCSI
> Data-Out buffer can differ from the size of the data area on
> the storage medium that is affected by the command. Make sure
> that the Data-Out buffer size is computed correctly. Apparently
> this part got dropped from my previous VERIFY / WRITE AND VERIFY
> patch before I posted it due to rebasing.
> 
> Fixes: commit 0e2eb7d12eaa ("target: Fix VERIFY and WRITE VERIFY command parsing")
> Signed-off-by: Bart Van Assche <bart.vanassche@xxxxxxxxxxx>
> Cc: Hannes Reinecke <hare@xxxxxxxx>
> Cc: Christoph Hellwig <hch@xxxxxx>
> Cc: Andy Grover <agrover@xxxxxxxxxx>
> Cc: David Disseldorp <ddiss@xxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> ---
>  drivers/target/target_core_sbc.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/target/target_core_sbc.c b/drivers/target/target_core_sbc.c
> index a0ad618f1b1a..51489d96cb31 100644
> --- a/drivers/target/target_core_sbc.c
> +++ b/drivers/target/target_core_sbc.c
> @@ -888,9 +888,10 @@ static sense_reason_t sbc_parse_verify(struct se_cmd *cmd, int *sectors,
>  sense_reason_t
>  sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops)
>  {
> +	enum { INVALID_SIZE = 1 };
>  	struct se_device *dev = cmd->se_dev;
>  	unsigned char *cdb = cmd->t_task_cdb;
> -	unsigned int size;
> +	unsigned int size = INVALID_SIZE;
>  	u32 sectors = 0;
>  	sense_reason_t ret;
>  
> @@ -1212,7 +1213,7 @@ sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops)
>  			return TCM_ADDRESS_OUT_OF_RANGE;
>  		}
>  
> -		if (!(cmd->se_cmd_flags & SCF_COMPARE_AND_WRITE))
> +		if (size == INVALID_SIZE)
>  			size = sbc_get_size(cmd, sectors);
>  	}
>  

This patch has no effect.

All it does for VERIFY + WRITE_AND_VERIFY is prevent sbc_get_size() from
being called twice with the same parameters, because your previous patch
in for-next was incorrectly only doing it for only bytchk = 1.

Anyways, sbc_parse_verify() should not being doing this directly, and
not for only bytchk = 1.

Anyways, I've fixed both cases and will post the proper fix inline
against patch #19.





[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]