|
@@ -762,7 +762,6 @@ static void transport_lun_remove_cmd(struct se_cmd *cmd)
|
|
|
transport_all_task_dev_remove_state(cmd);
|
|
|
spin_unlock_irqrestore(&T_TASK(cmd)->t_state_lock, flags);
|
|
|
|
|
|
- transport_free_dev_tasks(cmd);
|
|
|
|
|
|
check_lun:
|
|
|
spin_lock_irqsave(&lun->lun_cmd_lock, flags);
|
|
@@ -2058,6 +2057,13 @@ 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);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(transport_generic_free_cmd_intr);
|
|
|
+
|
|
|
static int transport_stop_tasks_for_cmd(struct se_cmd *cmd)
|
|
|
{
|
|
|
struct se_task *task, *task_tmp;
|
|
@@ -5301,6 +5307,8 @@ void transport_generic_free_cmd(
|
|
|
if (wait_for_tasks && cmd->transport_wait_for_tasks)
|
|
|
cmd->transport_wait_for_tasks(cmd, 0, 0);
|
|
|
|
|
|
+ transport_free_dev_tasks(cmd);
|
|
|
+
|
|
|
transport_generic_remove(cmd, release_to_pool,
|
|
|
session_reinstatement);
|
|
|
}
|
|
@@ -6136,6 +6144,9 @@ get_cmd:
|
|
|
case TRANSPORT_REMOVE:
|
|
|
transport_generic_remove(cmd, 1, 0);
|
|
|
break;
|
|
|
+ case TRANSPORT_FREE_CMD_INTR:
|
|
|
+ transport_generic_free_cmd(cmd, 0, 1, 0);
|
|
|
+ break;
|
|
|
case TRANSPORT_PROCESS_TMR:
|
|
|
transport_generic_do_tmr(cmd);
|
|
|
break;
|