[PATCH 6/6] target: push session reinstatement out of transport_generic_free_cmd

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxx>

Index: lio-core/drivers/infiniband/ulp/srpt/ib_srpt.c
===================================================================
--- lio-core.orig/drivers/infiniband/ulp/srpt/ib_srpt.c	2011-09-13 15:16:40.104088124 -0400
+++ lio-core/drivers/infiniband/ulp/srpt/ib_srpt.c	2011-09-13 15:18:33.088089266 -0400
@@ -1340,7 +1340,7 @@ static void srpt_put_send_ioctx(struct s
 	WARN_ON(srpt_get_cmd_state(ioctx) != SRPT_STATE_DONE);
 
 	srpt_unmap_sg_to_ib_sge(ioctx->ch, ioctx);
-	transport_generic_free_cmd(&ioctx->cmd, 0, 0);
+	transport_generic_free_cmd(&ioctx->cmd, 0);
 
 	if (ioctx->n_rbuf > 1) {
 		kfree(ioctx->rbufs);
Index: lio-core/drivers/scsi/ibmvscsi/ibmvscsis.c
===================================================================
--- lio-core.orig/drivers/scsi/ibmvscsi/ibmvscsis.c	2011-09-13 15:16:40.120088558 -0400
+++ lio-core/drivers/scsi/ibmvscsi/ibmvscsis.c	2011-09-13 15:16:50.492089526 -0400
@@ -922,7 +922,7 @@ static void ibmvscsis_check_stop_free(st
 {
 	if (se_cmd->se_tmr_req)
 		return;
-	transport_generic_free_cmd(se_cmd, 0, 0);
+	transport_generic_free_cmd(se_cmd, 0);
 }
 
 static u64 scsi_lun_to_int(u64 lun)
Index: lio-core/drivers/target/iscsi/iscsi_target.c
===================================================================
--- lio-core.orig/drivers/target/iscsi/iscsi_target.c	2011-09-13 15:16:40.144088409 -0400
+++ lio-core/drivers/target/iscsi/iscsi_target.c	2011-09-13 15:16:58.599588486 -0400
@@ -3547,7 +3547,7 @@ get_immediate:
 					iscsit_release_cmd(cmd);
 				else
 					transport_generic_free_cmd(&cmd->se_cmd,
-								1, 0);
+								1);
 				goto get_immediate;
 			case ISTATE_SEND_NOPIN_WANT_RESPONSE:
 				spin_unlock_bh(&cmd->istate_lock);
Index: lio-core/drivers/target/loopback/tcm_loop.c
===================================================================
--- lio-core.orig/drivers/target/loopback/tcm_loop.c	2011-09-13 15:16:40.160088142 -0400
+++ lio-core/drivers/target/loopback/tcm_loop.c	2011-09-13 15:17:07.356088700 -0400
@@ -200,7 +200,7 @@ static void tcm_loop_check_stop_free(str
 	 * Release the struct se_cmd, which will make a callback to release
 	 * struct tcm_loop_cmd * in tcm_loop_deallocate_core_cmd()
 	 */
-	transport_generic_free_cmd(se_cmd, 0, 0);
+	transport_generic_free_cmd(se_cmd, 0);
 }
 
 static void tcm_loop_release_cmd(struct se_cmd *se_cmd)
@@ -388,7 +388,7 @@ static int tcm_loop_device_reset(struct
 		SUCCESS : FAILED;
 release:
 	if (se_cmd)
-		transport_generic_free_cmd(se_cmd, 1, 0);
+		transport_generic_free_cmd(se_cmd, 1);
 	else
 		kmem_cache_free(tcm_loop_cmd_cache, tl_cmd);
 	kfree(tl_tmr);
Index: lio-core/drivers/target/target_core_transport.c
===================================================================
--- lio-core.orig/drivers/target/target_core_transport.c	2011-09-13 15:16:40.180088655 -0400
+++ lio-core/drivers/target/target_core_transport.c	2011-09-13 15:22:34.088088885 -0400
@@ -4352,42 +4352,25 @@ void transport_release_cmd(struct se_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);
 
@@ -4652,7 +4635,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(
@@ -5192,7 +5181,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);
Index: lio-core/drivers/target/tcm_fc/tfc_cmd.c
===================================================================
--- lio-core.orig/drivers/target/tcm_fc/tfc_cmd.c	2011-09-13 15:16:40.200090057 -0400
+++ lio-core/drivers/target/tcm_fc/tfc_cmd.c	2011-09-13 15:17:39.044089483 -0400
@@ -147,7 +147,7 @@ void ft_release_cmd(struct se_cmd *se_cm
 
 void ft_check_stop_free(struct se_cmd *se_cmd)
 {
-	transport_generic_free_cmd(se_cmd, 0, 0);
+	transport_generic_free_cmd(se_cmd, 0);
 }
 
 /*
@@ -303,7 +303,7 @@ static void ft_recv_seq(struct fc_seq *s
 		/* XXX need to find cmd if queued */
 		cmd->se_cmd.t_state = TRANSPORT_REMOVE;
 		cmd->seq = NULL;
-		transport_generic_free_cmd(&cmd->se_cmd, 0, 0);
+		transport_generic_free_cmd(&cmd->se_cmd, 0);
 		return;
 	}
 
@@ -321,7 +321,7 @@ static void ft_recv_seq(struct fc_seq *s
 		       __func__, fh->fh_r_ctl);
 		ft_invl_hw_context(cmd);
 		fc_frame_free(fp);
-		transport_generic_free_cmd(&cmd->se_cmd, 0, 0);
+		transport_generic_free_cmd(&cmd->se_cmd, 0);
 		break;
 	}
 }
@@ -409,7 +409,7 @@ static void ft_send_tm(struct ft_cmd *cm
 			sess = cmd->sess;
 			transport_send_check_condition_and_sense(&cmd->se_cmd,
 				cmd->se_cmd.scsi_sense_reason, 0);
-			transport_generic_free_cmd(&cmd->se_cmd, 0, 0);
+			transport_generic_free_cmd(&cmd->se_cmd, 0);
 			ft_sess_put(sess);
 			return;
 		}
@@ -461,7 +461,7 @@ static void ft_send_tm(struct ft_cmd *cm
 			sess = cmd->sess;
 			transport_send_check_condition_and_sense(&cmd->se_cmd,
 				cmd->se_cmd.scsi_sense_reason, 0);
-			transport_generic_free_cmd(&cmd->se_cmd, 0, 0);
+			transport_generic_free_cmd(&cmd->se_cmd, 0);
 			ft_sess_put(sess);
 			return;
 		}
@@ -659,7 +659,7 @@ static void ft_send_cmd(struct ft_cmd *c
 	if (ret == -ENOMEM) {
 		transport_send_check_condition_and_sense(se_cmd,
 				TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE, 0);
-		transport_generic_free_cmd(se_cmd, 0, 0);
+		transport_generic_free_cmd(se_cmd, 0);
 		return;
 	}
 	if (ret == -EINVAL) {
@@ -668,7 +668,7 @@ static void ft_send_cmd(struct ft_cmd *c
 		else
 			transport_send_check_condition_and_sense(se_cmd,
 					se_cmd->scsi_sense_reason, 0);
-		transport_generic_free_cmd(se_cmd, 0, 0);
+		transport_generic_free_cmd(se_cmd, 0);
 		return;
 	}
 	transport_generic_handle_cdb(se_cmd);
Index: lio-core/drivers/target/tcm_qla2xxx/tcm_qla2xxx_fabric.c
===================================================================
--- lio-core.orig/drivers/target/tcm_qla2xxx/tcm_qla2xxx_fabric.c	2011-09-13 15:16:40.220091679 -0400
+++ lio-core/drivers/target/tcm_qla2xxx/tcm_qla2xxx_fabric.c	2011-09-13 15:18:04.739806249 -0400
@@ -397,7 +397,7 @@ void tcm_qla2xxx_free_cmd(struct qla_tgt
 	 */
 	if (!cmd->se_cmd.se_dev) {
 		atomic_set(&cmd->cmd_stop_free, 1);
-		transport_generic_free_cmd(&cmd->se_cmd, 0, 0);
+		transport_generic_free_cmd(&cmd->se_cmd, 0);
 		return;
 	}
 
@@ -418,7 +418,7 @@ void tcm_qla2xxx_check_stop_free(struct
 		 * Release the associated se_cmd->se_tmr_req and se_cmd
 		 * TMR related state now.
 		 */
-		transport_generic_free_cmd(se_cmd, 1, 0);
+		transport_generic_free_cmd(se_cmd, 1);
 		qla_tgt_free_mcmd(mcmd);
 		return;
 	}
@@ -731,7 +731,7 @@ int tcm_qla2xxx_handle_tmr(struct qla_tg
 	 * Locate the underlying TCM struct se_lun from sc->device->lun
 	 */
 	if (transport_lookup_tmr_lun(se_cmd, lun) < 0) {
-		transport_generic_free_cmd(se_cmd, 1, 0);
+		transport_generic_free_cmd(se_cmd, 1);
 		return -EINVAL;
 	}
 	/*
Index: lio-core/drivers/target/tcm_vhost/tcm_vhost_scsi.c
===================================================================
--- lio-core.orig/drivers/target/tcm_vhost/tcm_vhost_scsi.c	2011-09-13 15:16:40.244088465 -0400
+++ lio-core/drivers/target/tcm_vhost/tcm_vhost_scsi.c	2011-09-13 15:18:25.400088636 -0400
@@ -49,8 +49,8 @@ static void vhost_scsi_free_cmd(struct t
 			put_page(sg_page(&tv_cmd->tvc_sgl[i]));
 	}
 
-	/* TODO what do wait_for_tasks and session_reinstatement do? */
-	transport_generic_free_cmd(se_cmd, 1, 0);
+	/* TODO what does wait_for_tasks do? */
+	transport_generic_free_cmd(se_cmd, 1);
 	kfree(tv_cmd);
 }
 
Index: lio-core/include/target/target_core_transport.h
===================================================================
--- lio-core.orig/include/target/target_core_transport.h	2011-09-13 15:16:40.264091716 -0400
+++ lio-core/include/target/target_core_transport.h	2011-09-13 15:19:17.264089186 -0400
@@ -185,7 +185,7 @@ extern int transport_check_aborted_statu
 extern int transport_send_check_condition_and_sense(struct se_cmd *, u8, int);
 extern void transport_send_task_abort(struct se_cmd *);
 extern void transport_release_cmd(struct se_cmd *);
-extern void transport_generic_free_cmd(struct se_cmd *, int, int);
+extern bool transport_generic_free_cmd(struct se_cmd *, int);
 extern void transport_generic_wait_for_cmds(struct se_cmd *, int);
 extern int transport_init_task_sg(struct se_task *, struct se_mem *, u32);
 extern int transport_map_mem_to_sg(struct se_task *, struct list_head *,
--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux