Re: [PATCH] tcm_fc: Add abort flag

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

 



On Tue, 2012-04-03 at 10:24 -0700, Mark Rustad wrote:
> Add abort flag and use it to terminate processing when an exchange
> is timed out or is reset.
> 
> Signed-off-by: Mark Rustad <mark.d.rustad@xxxxxxxxx>
> Acked-by: Kiran Patil <Kiran.patil@xxxxxxxxx>
> ---
> 
>  drivers/target/tcm_fc/tcm_fc.h  |    1 +
>  drivers/target/tcm_fc/tfc_cmd.c |    8 +++++++-
>  drivers/target/tcm_fc/tfc_io.c  |    2 ++
>  3 files changed, 10 insertions(+), 1 deletions(-)
> 

Applied to lio-core.git.  Thanks MDR!

Would you mind adding a little more detail in the commit wrt to the bug
that's fixed here so the distro folks can gauge it's importance in
mainline..?

>From there, it will be queued in target-pending/3.4-rc-fixes headed for
mainline in the next days, and Cc: <stable@xxxxxxxxxxxxxxx> so it's
picked up by greg-kh for <= v3.3 stable.

Thanks!

--nab


> diff --git a/drivers/target/tcm_fc/tcm_fc.h b/drivers/target/tcm_fc/tcm_fc.h
> index e05c551..be7ed12 100644
> --- a/drivers/target/tcm_fc/tcm_fc.h
> +++ b/drivers/target/tcm_fc/tcm_fc.h
> @@ -124,6 +124,7 @@ struct ft_cmd {
>  	/* Local sense buffer */
>  	unsigned char ft_sense_buffer[TRANSPORT_SENSE_BUFFER];
>  	u32 was_ddp_setup:1;		/* Set only if ddp is setup */
> +	u32 aborted:1;			/* Set if aborted by reset or timeout */
>  	struct scatterlist *sg;		/* Set only if DDP is setup */
>  	u32 sg_cnt;			/* No. of item in scatterlist */
>  };
> diff --git a/drivers/target/tcm_fc/tfc_cmd.c b/drivers/target/tcm_fc/tfc_cmd.c
> index 9e7e26c..4d3283c 100644
> --- a/drivers/target/tcm_fc/tfc_cmd.c
> +++ b/drivers/target/tcm_fc/tfc_cmd.c
> @@ -126,6 +126,8 @@ int ft_queue_status(struct se_cmd *se_cmd)
>  	struct fc_exch *ep;
>  	size_t len;
>  
> +	if (cmd->aborted)
> +		return 0;
>  	ft_dump_cmd(cmd, __func__);
>  	ep = fc_seq_exch(cmd->seq);
>  	lport = ep->lp;
> @@ -192,6 +194,8 @@ int ft_write_pending(struct se_cmd *se_cmd)
>  
>  	ft_dump_cmd(cmd, __func__);
>  
> +	if (cmd->aborted)
> +		return 0;
>  	ep = fc_seq_exch(cmd->seq);
>  	lport = ep->lp;
>  	fp = fc_frame_alloc(lport, sizeof(*txrdy));
> @@ -265,7 +269,7 @@ static void ft_recv_seq(struct fc_seq *sp, struct fc_frame *fp, void *arg)
>  	if (IS_ERR(fp)) {
>  		/* XXX need to find cmd if queued */
>  		cmd->seq = NULL;
> -		transport_generic_free_cmd(&cmd->se_cmd, 0);
> +		cmd->aborted = true;
>  		return;
>  	}
>  
> @@ -445,6 +449,8 @@ int ft_queue_tm_resp(struct se_cmd *se_cmd)
>  	struct se_tmr_req *tmr = se_cmd->se_tmr_req;
>  	enum fcp_resp_rsp_codes code;
>  
> +	if (cmd->aborted)
> +		return 0;
>  	switch (tmr->response) {
>  	case TMR_FUNCTION_COMPLETE:
>  		code = FCP_TMF_CMPL;
> diff --git a/drivers/target/tcm_fc/tfc_io.c b/drivers/target/tcm_fc/tfc_io.c
> index d8cabc2..7b34f9b 100644
> --- a/drivers/target/tcm_fc/tfc_io.c
> +++ b/drivers/target/tcm_fc/tfc_io.c
> @@ -81,6 +81,8 @@ int ft_queue_data_in(struct se_cmd *se_cmd)
>  	void *from;
>  	void *to = NULL;
>  
> +	if (cmd->aborted)
> +		return 0;
>  	ep = fc_seq_exch(cmd->seq);
>  	lport = ep->lp;
>  	cmd->seq = lport->tt.seq_start_next(cmd->seq);
> 
> --
> 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


--
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