]> git.karo-electronics.de Git - linux-beck.git/commitdiff
target: Remove transport_do_task_sg_chain() and associated detritus
authorRoland Dreier <roland@purestorage.com>
Fri, 30 Mar 2012 18:29:15 +0000 (11:29 -0700)
committerNicholas Bellinger <nab@linux-iscsi.org>
Sun, 15 Apr 2012 00:40:32 +0000 (17:40 -0700)
Now that all fabrics are converted over to using se_cmd->t_data_sg
directly, we can drop the task sg chaining support.  With the modern
memory allocation in target core, task sg chaining is needless
overhead -- we would split up the main cmd sglist into pieces, and
then splice those pieces back together instead of just using the
original list directly.

Signed-off-by: Roland Dreier <roland@purestorage.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_transport.c
include/target/target_core_base.h
include/target/target_core_fabric.h

index db05c75864e033410efebdb1b8876a7db8e8c452..9fdc708d50402f3fa63b9d505ad20bf5f543170e 100644 (file)
@@ -3699,76 +3699,6 @@ static inline sector_t transport_limit_task_sectors(
        return sectors;
 }
 
-
-/*
- * This function can be used by HW target mode drivers to create a linked
- * scatterlist from all contiguously allocated struct se_task->task_sg[].
- * This is intended to be called during the completion path by TCM Core
- * when struct target_core_fabric_ops->check_task_sg_chaining is enabled.
- */
-void transport_do_task_sg_chain(struct se_cmd *cmd)
-{
-       struct scatterlist *sg_first = NULL;
-       struct scatterlist *sg_prev = NULL;
-       int sg_prev_nents = 0;
-       struct scatterlist *sg;
-       struct se_task *task;
-       u32 chained_nents = 0;
-       int i;
-
-       BUG_ON(!cmd->se_tfo->task_sg_chaining);
-
-       /*
-        * Walk the struct se_task list and setup scatterlist chains
-        * for each contiguously allocated struct se_task->task_sg[].
-        */
-       list_for_each_entry(task, &cmd->t_task_list, t_list) {
-               if (!task->task_sg)
-                       continue;
-
-               if (!sg_first) {
-                       sg_first = task->task_sg;
-                       chained_nents = task->task_sg_nents;
-               } else {
-                       sg_chain(sg_prev, sg_prev_nents, task->task_sg);
-                       chained_nents += task->task_sg_nents;
-               }
-               /*
-                * For the padded tasks, use the extra SGL vector allocated
-                * in transport_allocate_data_tasks() for the sg_prev_nents
-                * offset into sg_chain() above.
-                *
-                * We do not need the padding for the last task (or a single
-                * task), but in that case we will never use the sg_prev_nents
-                * value below which would be incorrect.
-                */
-               sg_prev_nents = (task->task_sg_nents + 1);
-               sg_prev = task->task_sg;
-       }
-       /*
-        * Setup the starting pointer and total t_tasks_sg_linked_no including
-        * padding SGs for linking and to mark the end.
-        */
-       cmd->t_tasks_sg_chained = sg_first;
-       cmd->t_tasks_sg_chained_no = chained_nents;
-
-       pr_debug("Setup cmd: %p cmd->t_tasks_sg_chained: %p and"
-               " t_tasks_sg_chained_no: %u\n", cmd, cmd->t_tasks_sg_chained,
-               cmd->t_tasks_sg_chained_no);
-
-       for_each_sg(cmd->t_tasks_sg_chained, sg,
-                       cmd->t_tasks_sg_chained_no, i) {
-
-               pr_debug("SG[%d]: %p page: %p length: %d offset: %d\n",
-                       i, sg, sg_page(sg), sg->length, sg->offset);
-               if (sg_is_chain(sg))
-                       pr_debug("SG: %p sg_is_chain=1\n", sg);
-               if (sg_is_last(sg))
-                       pr_debug("SG: %p sg_is_last=1\n", sg);
-       }
-}
-EXPORT_SYMBOL(transport_do_task_sg_chain);
-
 /*
  * Break up cmd into chunks transport can handle
  */
index 6a02c99d54a53a08c5b2787d1986e0ff4f12141d..8ec4e8232be4715199adfc21904bd87daaa62055 100644 (file)
@@ -572,7 +572,6 @@ struct se_cmd {
        unsigned char           *t_task_cdb;
        unsigned char           __t_task_cdb[TCM_MAX_COMMAND_SIZE];
        unsigned long long      t_task_lba;
-       u32                     t_tasks_sg_chained_no;
        atomic_t                t_fe_count;
        atomic_t                t_se_count;
        atomic_t                t_task_cdbs_left;
@@ -593,7 +592,6 @@ struct se_cmd {
        struct completion       t_transport_stop_comp;
        struct completion       transport_lun_fe_stop_comp;
        struct completion       transport_lun_stop_comp;
-       struct scatterlist      *t_tasks_sg_chained;
 
        struct work_struct      work;
 
index 10c6908096011fdc2c73628d707bed69b561afde..83734ccc982c06d2ea0f9b9e2ab5d2085f9fe1fa 100644 (file)
@@ -3,12 +3,6 @@
 
 struct target_core_fabric_ops {
        struct configfs_subsystem *tf_subsys;
-       /*
-        * Optional to signal struct se_task->task_sg[] padding entries
-        * for scatterlist chaining using transport_do_task_sg_link(),
-        * disabled by default
-        */
-       bool task_sg_chaining;
        char *(*get_fabric_name)(void);
        u8 (*get_fabric_proto_ident)(struct se_portal_group *);
        char *(*tpg_get_wwn)(struct se_portal_group *);
@@ -124,7 +118,6 @@ int transport_generic_handle_cdb_map(struct se_cmd *);
 int    transport_generic_handle_data(struct se_cmd *);
 int    transport_generic_map_mem_to_cmd(struct se_cmd *cmd,
                struct scatterlist *, u32, struct scatterlist *, u32);
-void   transport_do_task_sg_chain(struct se_cmd *);
 int    transport_generic_new_cmd(struct se_cmd *);
 
 void   transport_generic_process_write(struct se_cmd *);