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