tcm_fc: Remove use of transport_do_task_sg_chain()
authorRoland Dreier <roland@purestorage.com>
Fri, 30 Mar 2012 18:29:11 +0000 (11:29 -0700)
committerNicholas Bellinger <nab@linux-iscsi.org>
Sun, 15 Apr 2012 00:40:31 +0000 (17:40 -0700)
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@purestorage.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Acked-by: Kiran Patil <Kiran.patil@intel.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/tcm_fc/tfc_cmd.c
drivers/target/tcm_fc/tfc_conf.c
drivers/target/tcm_fc/tfc_io.c

index a375f257aabcc80b19ca4d369ba4d54e5663881a..f03fb9730f5bb89a0cd003817544693e3600e383 100644 (file)
@@ -215,20 +215,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;
                }
        }
index 2948dc9446196f2f2c9fa9c8b87dc85d16300f74..9501844fae2d01fd55a7870bb8443ec13fd701ed 100644 (file)
@@ -576,9 +576,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
         */
index dc7c0db26e20f2aa8e1be2e0ec7b471cce59b0ab..071a505f98fc13256fa536f4a39cae111ccd1050 100644 (file)
@@ -228,7 +228,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