Re: [PATCH 09/17] target/core: Always call transport_complete_callback() upon failure

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

 



On Mon, 2018-09-17 at 14:35 -0700, Bart Van Assche wrote:
> Call transport_complete_callback() not only if COMPARE AND WRITE fails but
> also if XDWRITEREAD fails. This makes the code more systematic.
> 
> Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx>
> Cc: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx>
> Cc: Mike Christie <mchristi@xxxxxxxxxx>
> Cc: Christoph Hellwig <hch@xxxxxx>
> Cc: Hannes Reinecke <hare@xxxxxxx>
> ---
>  drivers/target/target_core_sbc.c       |  6 +++++-
>  drivers/target/target_core_transport.c | 11 +++--------
>  2 files changed, 8 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/target/target_core_sbc.c b/drivers/target/target_core_sbc.c
> index 4719e6a98430..c155e12ae8b9 100644
> --- a/drivers/target/target_core_sbc.c
> +++ b/drivers/target/target_core_sbc.c
> @@ -360,6 +360,10 @@ static sense_reason_t xdreadwrite_callback(struct se_cmd *cmd, bool success,
>  	unsigned int offset;
>  	sense_reason_t ret = TCM_NO_SENSE;
>  	int i, count;
> +
> +	if (!success)
> +		return 0;
> +
>  	/*
>  	 * From sbc3r22.pdf section 5.48 XDWRITEREAD (10) command
>  	 *
> @@ -431,7 +435,7 @@ static sense_reason_t compare_and_write_post(struct se_cmd *cmd, bool success,
>  	 * sent to the backend driver.
>  	 */
>  	spin_lock_irq(&cmd->t_state_lock);
> -	if (cmd->transport_state & CMD_T_SENT) {
> +	if (success) {
>  		cmd->se_cmd_flags |= SCF_COMPARE_AND_WRITE_POST;
>  		*post_ret = 1;
>  
> diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
> index ec3cb16b9e0e..79fa79afcdc2 100644
> --- a/drivers/target/target_core_transport.c
> +++ b/drivers/target/target_core_transport.c
> @@ -1793,7 +1793,7 @@ EXPORT_SYMBOL(target_submit_tmr);
>  void transport_generic_request_failure(struct se_cmd *cmd,
>  		sense_reason_t sense_reason)
>  {
> -	int ret = 0, post_ret = 0;
> +	int ret = 0;
>  
>  	pr_debug("-----[ Storage Engine Exception; sense_reason %d\n",
>  		 sense_reason);
> @@ -1804,13 +1804,8 @@ void transport_generic_request_failure(struct se_cmd *cmd,
>  	 */
>  	transport_complete_task_attr(cmd);
>  
> -	/*
> -	 * Handle special case for COMPARE_AND_WRITE failure, where the
> -	 * callback is expected to drop the per device ->caw_sem.
> -	 */
> -	if ((cmd->se_cmd_flags & SCF_COMPARE_AND_WRITE) &&
> -	     cmd->transport_complete_callback)
> -		cmd->transport_complete_callback(cmd, false, &post_ret);
> +	if (cmd->transport_complete_callback)
> +		cmd->transport_complete_callback(cmd, false, NULL);
>  
>  	if (transport_check_aborted_status(cmd, 1))
>  		return;

Looks OK wrt earlier COMPARE_AND_WRITE failure cases originally
addressed in commit 9b2792c3d.

Reviewed-by: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx>




[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