target: Remove core TRANSPORT_FREE_CMD_INTR usage
Nicholas Bellinger [Wed, 2 Nov 2011 15:28:20 +0000 (08:28 -0700)]
This patch drops TRANSPORT_FREE_CMD_INTR usage from target core, which
includes the removal of transport_generic_free_cmd_intr() symbol,
TRANSPORT_FREE_CMD_INTR usage in transport_processing_thread(), and
special case LUN_RESET handling to skip TRANSPORT_FREE_CMD_INTR processing
in core_tmr_drain_cmd_list().  We now expect that fabric modules will
use an internal workqueue to provide process context when releasing
se_cmd descriptor resources via transport_generic_free_cmd().

Reported-by: Christoph Hellwig <hch@lst.de>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Roland Dreier <roland@purestorage.com>
Cc: Madhuranath Iyengar <mni@risingtidesystems.com>
Signed-off-by: Nicholas Bellinger <nab@risingtidesystems.com>

drivers/target/target_core_tmr.c
drivers/target/target_core_transport.c
include/target/target_core_base.h
include/target/target_core_transport.h

index b1b9f2d..1d2aaba 100644 (file)
@@ -329,16 +329,6 @@ static void core_tmr_drain_cmd_list(
                 */
                if (prout_cmd == cmd)
                        continue;
-               /*
-                * Skip direct processing of TRANSPORT_FREE_CMD_INTR for
-                * HW target mode fabrics.
-                */
-               spin_lock(&cmd->t_state_lock);
-               if (cmd->t_state == TRANSPORT_FREE_CMD_INTR) {
-                       spin_unlock(&cmd->t_state_lock);
-                       continue;
-               }
-               spin_unlock(&cmd->t_state_lock);
 
                atomic_set(&cmd->t_transport_queue_active, 0);
                atomic_dec(&qobj->queue_cnt);
index bf8867f..64ee334 100644 (file)
@@ -1718,13 +1718,6 @@ int transport_generic_handle_tmr(
 }
 EXPORT_SYMBOL(transport_generic_handle_tmr);
 
-void transport_generic_free_cmd_intr(
-       struct se_cmd *cmd)
-{
-       transport_add_cmd_to_queue(cmd, TRANSPORT_FREE_CMD_INTR, false);
-}
-EXPORT_SYMBOL(transport_generic_free_cmd_intr);
-
 /*
  * If the task is active, request it to be stopped and sleep until it
  * has completed.
@@ -4597,9 +4590,6 @@ get_cmd:
                case TRANSPORT_PROCESS_WRITE:
                        transport_generic_process_write(cmd);
                        break;
-               case TRANSPORT_FREE_CMD_INTR:
-                       transport_generic_free_cmd(cmd, 0);
-                       break;
                case TRANSPORT_PROCESS_TMR:
                        transport_generic_do_tmr(cmd);
                        break;
index 35aa786..d571bcf 100644 (file)
@@ -89,7 +89,6 @@ enum transport_state_table {
        TRANSPORT_PROCESS_TMR   = 9,
        TRANSPORT_ISTATE_PROCESSING = 11,
        TRANSPORT_NEW_CMD_MAP   = 16,
-       TRANSPORT_FREE_CMD_INTR = 17,
        TRANSPORT_COMPLETE_QF_WP = 18,
        TRANSPORT_COMPLETE_QF_OK = 19,
 };
index a037a1a..d1b68c9 100644 (file)
@@ -160,7 +160,6 @@ extern int transport_generic_handle_cdb_map(struct se_cmd *);
 extern int transport_generic_handle_data(struct se_cmd *);
 extern void transport_new_cmd_failure(struct se_cmd *);
 extern int transport_generic_handle_tmr(struct se_cmd *);
-extern void transport_generic_free_cmd_intr(struct se_cmd *);
 extern bool target_stop_task(struct se_task *task, unsigned long *flags);
 extern int transport_generic_map_mem_to_cmd(struct se_cmd *cmd, struct scatterlist *, u32,
                                struct scatterlist *, u32);