aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target/target_core_transport.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2011-09-13 23:09:01 +0200
committerNicholas Bellinger <nab@linux-iscsi.org>2011-10-24 03:20:38 +0000
commit82f1c8a4e7739eae9f1c32c2c419efdc19b8af41 (patch)
treee4b9141c59cbc1402b96fb34003205fe90d362df /drivers/target/target_core_transport.c
parenttarget: remove transport_generic_remove (diff)
downloadlinux-dev-82f1c8a4e7739eae9f1c32c2c419efdc19b8af41.tar.xz
linux-dev-82f1c8a4e7739eae9f1c32c2c419efdc19b8af41.zip
target: push session reinstatement out of transport_generic_free_cmd
Push session reinstatement out of transport_generic_free_cmd into the only caller that actually needs it. Clean up transport_generic_free_cmd a bit, and remove the useless comment. I'd love to add a more useful kerneldoc comment for it, but as this point I'm still a bit confused in where it stands in the command release stack. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target/target_core_transport.c')
-rw-r--r--drivers/target/target_core_transport.c37
1 files changed, 13 insertions, 24 deletions
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index 4f21b88b85b1..db2f8987a046 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -4331,42 +4331,25 @@ void transport_release_cmd(struct se_cmd *cmd)
}
EXPORT_SYMBOL(transport_release_cmd);
-/* transport_generic_free_cmd():
- *
- * Called from processing frontend to release storage engine resources
- */
-void transport_generic_free_cmd(
- struct se_cmd *cmd,
- int wait_for_tasks,
- int session_reinstatement)
+bool transport_generic_free_cmd(struct se_cmd *cmd, int wait_for_tasks)
{
if (!(cmd->se_cmd_flags & SCF_SE_LUN_CMD))
transport_release_cmd(cmd);
else {
core_dec_lacl_count(cmd->se_sess->se_node_acl, cmd);
- if (cmd->se_lun) {
-#if 0
- pr_debug("cmd: %p ITT: 0x%08x contains"
- " cmd->se_lun\n", cmd,
- cmd->se_tfo->get_task_tag(cmd));
-#endif
+ if (cmd->se_lun)
transport_lun_remove_cmd(cmd);
- }
if (wait_for_tasks && cmd->transport_wait_for_tasks)
cmd->transport_wait_for_tasks(cmd, 0, 0);
transport_free_dev_tasks(cmd);
- if (!transport_put_cmd(cmd) && session_reinstatement) {
- unsigned long flags;
-
- spin_lock_irqsave(&cmd->t_state_lock, flags);
- transport_all_task_dev_remove_state(cmd);
- spin_unlock_irqrestore(&cmd->t_state_lock, flags);
- }
+ return transport_put_cmd(cmd);
}
+
+ return true;
}
EXPORT_SYMBOL(transport_generic_free_cmd);
@@ -4631,7 +4614,13 @@ remove:
if (!remove_cmd)
return;
- transport_generic_free_cmd(cmd, 0, session_reinstatement);
+ if (!transport_generic_free_cmd(cmd, 0) && session_reinstatement) {
+ unsigned long flags;
+
+ spin_lock_irqsave(&cmd->t_state_lock, flags);
+ transport_all_task_dev_remove_state(cmd);
+ spin_unlock_irqrestore(&cmd->t_state_lock, flags);
+ }
}
static int transport_get_sense_codes(
@@ -5181,7 +5170,7 @@ get_cmd:
transport_put_cmd(cmd);
break;
case TRANSPORT_FREE_CMD_INTR:
- transport_generic_free_cmd(cmd, 0, 0);
+ transport_generic_free_cmd(cmd, 0);
break;
case TRANSPORT_PROCESS_TMR:
transport_generic_do_tmr(cmd);