On Fri, 2012-03-30 at 11:29 -0700, Roland Dreier wrote: > From: Roland Dreier <roland@xxxxxxxxxxxxxxx> > > With the modern target core, se_cmd->t_data_sg already points to a > sglist that covers the whole command. So task_sg chaining is needless > overhead and obfuscation -- instead of splicing the split up task > sglists back into one list, we can just use the original list directly. > > Signed-off-by: Roland Dreier <roland@xxxxxxxxxxxxxxx> Hi Roland, Looks fine for the DDP offload case. Applied w/ Kiran's ACK. Thanks folks! --nab > --- > drivers/target/tcm_fc/tfc_cmd.c | 18 ++++-------------- > drivers/target/tcm_fc/tfc_conf.c | 3 --- > drivers/target/tcm_fc/tfc_io.c | 2 +- > 3 files changed, 5 insertions(+), 18 deletions(-) > > diff --git a/drivers/target/tcm_fc/tfc_cmd.c b/drivers/target/tcm_fc/tfc_cmd.c > index dc772f9..1d6076d 100644 > --- a/drivers/target/tcm_fc/tfc_cmd.c > +++ b/drivers/target/tcm_fc/tfc_cmd.c > @@ -211,20 +211,10 @@ int ft_write_pending(struct se_cmd *se_cmd) > */ > if ((ep->xid <= lport->lro_xid) && > (fh->fh_r_ctl == FC_RCTL_DD_DATA_DESC)) { > - if (se_cmd->se_cmd_flags & SCF_SCSI_DATA_SG_IO_CDB) { > - /* > - * cmd may have been broken up into multiple > - * tasks. Link their sgs together so we can > - * operate on them all at once. > - */ > - transport_do_task_sg_chain(se_cmd); > - cmd->sg = se_cmd->t_tasks_sg_chained; > - cmd->sg_cnt = > - se_cmd->t_tasks_sg_chained_no; > - } > - if (cmd->sg && lport->tt.ddp_target(lport, ep->xid, > - cmd->sg, > - cmd->sg_cnt)) > + if ((se_cmd->se_cmd_flags & SCF_SCSI_DATA_SG_IO_CDB) && > + lport->tt.ddp_target(lport, ep->xid, > + se_cmd->t_data_sg, > + se_cmd->t_data_nents)) > cmd->was_ddp_setup = 1; > } > } > diff --git a/drivers/target/tcm_fc/tfc_conf.c b/drivers/target/tcm_fc/tfc_conf.c > index 202755c..2e3eb2c 100644 > --- a/drivers/target/tcm_fc/tfc_conf.c > +++ b/drivers/target/tcm_fc/tfc_conf.c > @@ -572,9 +572,6 @@ int ft_register_configfs(void) > } > fabric->tf_ops = ft_fabric_ops; > > - /* Allowing support for task_sg_chaining */ > - fabric->tf_ops.task_sg_chaining = 1; > - > /* > * Setup default attribute lists for various fabric->tf_cit_tmpl > */ > diff --git a/drivers/target/tcm_fc/tfc_io.c b/drivers/target/tcm_fc/tfc_io.c > index d8cabc2..b307808 100644 > --- a/drivers/target/tcm_fc/tfc_io.c > +++ b/drivers/target/tcm_fc/tfc_io.c > @@ -227,7 +227,7 @@ void ft_recv_write_data(struct ft_cmd *cmd, struct fc_frame *fp) > "payload, Frame will be dropped if" > "'Sequence Initiative' bit in f_ctl is" > "not set\n", __func__, ep->xid, f_ctl, > - cmd->sg, cmd->sg_cnt); > + se_cmd->t_data_sg, se_cmd->t_data_nents); > /* > * Invalidate HW DDP context if it was setup for respective > * command. Invalidation of HW DDP context is requited in both -- 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