mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	target: change core_tpg_register prototype
Remove the unneeded fabric_ptr argument, and change the type argument to pass in a SPC protocol identifier. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
		
							parent
							
								
									3868e4365f
								
							
						
					
					
						commit
						e4aae5af81
					
				
					 14 changed files with 38 additions and 50 deletions
				
			
		| 
						 | 
				
			
			@ -238,8 +238,7 @@ def tcm_mod_build_configfs(proto_ident, fabric_mod_dir_var, fabric_mod_name):
 | 
			
		|||
	buf += "	tpg->" + fabric_mod_port + " = " + fabric_mod_port + ";\n"
 | 
			
		||||
	buf += "	tpg->" + fabric_mod_port + "_tpgt = tpgt;\n\n"
 | 
			
		||||
	buf += "	ret = core_tpg_register(&" + fabric_mod_name + "_ops, wwn,\n"
 | 
			
		||||
	buf += "				&tpg->se_tpg, tpg,\n"
 | 
			
		||||
	buf += "				TRANSPORT_TPG_TYPE_NORMAL);\n"
 | 
			
		||||
	buf += "				&tpg->se_tpg, SCSI_PROTOCOL_SAS);\n"
 | 
			
		||||
	buf += "	if (ret < 0) {\n"
 | 
			
		||||
	buf += "		kfree(tpg);\n"
 | 
			
		||||
	buf += "		return NULL;\n"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3791,7 +3791,7 @@ static struct se_portal_group *srpt_make_tpg(struct se_wwn *wwn,
 | 
			
		|||
 | 
			
		||||
	/* Initialize sport->port_wwn and sport->port_tpg_1 */
 | 
			
		||||
	res = core_tpg_register(&srpt_template, &sport->port_wwn,
 | 
			
		||||
			&sport->port_tpg_1, sport, TRANSPORT_TPG_TYPE_NORMAL);
 | 
			
		||||
			&sport->port_tpg_1, SCSI_PROTOCOL_SRP);
 | 
			
		||||
	if (res)
 | 
			
		||||
		return ERR_PTR(res);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1113,8 +1113,8 @@ static struct se_portal_group *tcm_qla2xxx_make_tpg(
 | 
			
		|||
	tpg->tpg_attrib.cache_dynamic_acls = 1;
 | 
			
		||||
	tpg->tpg_attrib.demo_mode_login_only = 1;
 | 
			
		||||
 | 
			
		||||
	ret = core_tpg_register(&tcm_qla2xxx_ops, wwn,
 | 
			
		||||
				&tpg->se_tpg, tpg, TRANSPORT_TPG_TYPE_NORMAL);
 | 
			
		||||
	ret = core_tpg_register(&tcm_qla2xxx_ops, wwn, &tpg->se_tpg,
 | 
			
		||||
				SCSI_PROTOCOL_FCP);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		kfree(tpg);
 | 
			
		||||
		return NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -1233,8 +1233,8 @@ static struct se_portal_group *tcm_qla2xxx_npiv_make_tpg(
 | 
			
		|||
	tpg->tpg_attrib.cache_dynamic_acls = 1;
 | 
			
		||||
	tpg->tpg_attrib.demo_mode_login_only = 1;
 | 
			
		||||
 | 
			
		||||
	ret = core_tpg_register(&tcm_qla2xxx_npiv_ops, wwn,
 | 
			
		||||
				&tpg->se_tpg, tpg, TRANSPORT_TPG_TYPE_NORMAL);
 | 
			
		||||
	ret = core_tpg_register(&tcm_qla2xxx_npiv_ops, wwn, &tpg->se_tpg,
 | 
			
		||||
				SCSI_PROTOCOL_FCP);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		kfree(tpg);
 | 
			
		||||
		return NULL;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1421,7 +1421,7 @@ static struct se_portal_group *lio_target_tiqn_addtpg(
 | 
			
		|||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	ret = core_tpg_register(&iscsi_ops, wwn, &tpg->tpg_se_tpg,
 | 
			
		||||
				tpg, TRANSPORT_TPG_TYPE_NORMAL);
 | 
			
		||||
				SCSI_PROTOCOL_ISCSI);
 | 
			
		||||
	if (ret < 0)
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,8 +68,7 @@ int iscsit_load_discovery_tpg(void)
 | 
			
		|||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ret = core_tpg_register(&iscsi_ops, NULL, &tpg->tpg_se_tpg,
 | 
			
		||||
				tpg, TRANSPORT_TPG_TYPE_DISCOVERY);
 | 
			
		||||
	ret = core_tpg_register(&iscsi_ops, NULL, &tpg->tpg_se_tpg, -1);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		kfree(tpg);
 | 
			
		||||
		return -1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1204,8 +1204,8 @@ static struct se_portal_group *tcm_loop_make_naa_tpg(
 | 
			
		|||
	/*
 | 
			
		||||
	 * Register the tl_tpg as a emulated SAS TCM Target Endpoint
 | 
			
		||||
	 */
 | 
			
		||||
	ret = core_tpg_register(&loop_ops, wwn, &tl_tpg->tl_se_tpg, tl_tpg,
 | 
			
		||||
			TRANSPORT_TPG_TYPE_NORMAL);
 | 
			
		||||
	ret = core_tpg_register(&loop_ops, wwn, &tl_tpg->tl_se_tpg,
 | 
			
		||||
				tl_hba->tl_proto_id);
 | 
			
		||||
	if (ret < 0)
 | 
			
		||||
		return ERR_PTR(-ENOMEM);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2152,8 +2152,7 @@ static struct se_portal_group *sbp_make_tpg(
 | 
			
		|||
		goto out_free_tpg;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ret = core_tpg_register(&sbp_ops, wwn, &tpg->se_tpg, tpg,
 | 
			
		||||
			TRANSPORT_TPG_TYPE_NORMAL);
 | 
			
		||||
	ret = core_tpg_register(&sbp_ops, wwn, &tpg->se_tpg, SCSI_PROTOCOL_SBP);
 | 
			
		||||
	if (ret < 0)
 | 
			
		||||
		goto out_unreg_mgt_agt;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -634,8 +634,7 @@ int core_tpg_register(
 | 
			
		|||
	const struct target_core_fabric_ops *tfo,
 | 
			
		||||
	struct se_wwn *se_wwn,
 | 
			
		||||
	struct se_portal_group *se_tpg,
 | 
			
		||||
	void *tpg_fabric_ptr,
 | 
			
		||||
	int se_tpg_type)
 | 
			
		||||
	int proto_id)
 | 
			
		||||
{
 | 
			
		||||
	struct se_lun *lun;
 | 
			
		||||
	u32 i;
 | 
			
		||||
| 
						 | 
				
			
			@ -661,8 +660,7 @@ int core_tpg_register(
 | 
			
		|||
		init_completion(&lun->lun_ref_comp);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	se_tpg->se_tpg_type = se_tpg_type;
 | 
			
		||||
	se_tpg->se_tpg_fabric_ptr = tpg_fabric_ptr;
 | 
			
		||||
	se_tpg->proto_id = proto_id;
 | 
			
		||||
	se_tpg->se_tpg_tfo = tfo;
 | 
			
		||||
	se_tpg->se_tpg_wwn = se_wwn;
 | 
			
		||||
	atomic_set(&se_tpg->tpg_pr_ref_count, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -673,7 +671,7 @@ int core_tpg_register(
 | 
			
		|||
	spin_lock_init(&se_tpg->session_lock);
 | 
			
		||||
	spin_lock_init(&se_tpg->tpg_lun_lock);
 | 
			
		||||
 | 
			
		||||
	if (se_tpg->se_tpg_type == TRANSPORT_TPG_TYPE_NORMAL) {
 | 
			
		||||
	if (se_tpg->proto_id >= 0) {
 | 
			
		||||
		if (core_tpg_setup_virtual_lun0(se_tpg) < 0) {
 | 
			
		||||
			array_free(se_tpg->tpg_lun_list,
 | 
			
		||||
				   TRANSPORT_MAX_LUNS_PER_TPG);
 | 
			
		||||
| 
						 | 
				
			
			@ -685,11 +683,10 @@ int core_tpg_register(
 | 
			
		|||
	list_add_tail(&se_tpg->se_tpg_node, &tpg_list);
 | 
			
		||||
	spin_unlock_bh(&tpg_lock);
 | 
			
		||||
 | 
			
		||||
	pr_debug("TARGET_CORE[%s]: Allocated %s struct se_portal_group for"
 | 
			
		||||
		" endpoint: %s, Portal Tag: %u\n", tfo->get_fabric_name(),
 | 
			
		||||
		(se_tpg->se_tpg_type == TRANSPORT_TPG_TYPE_NORMAL) ?
 | 
			
		||||
		"Normal" : "Discovery", (tfo->tpg_get_wwn(se_tpg) == NULL) ?
 | 
			
		||||
		"None" : tfo->tpg_get_wwn(se_tpg), tfo->tpg_get_tag(se_tpg));
 | 
			
		||||
	pr_debug("TARGET_CORE[%s]: Allocated portal_group for endpoint: %s, "
 | 
			
		||||
		 "Proto: %d, Portal Tag: %u\n", tfo->get_fabric_name(),
 | 
			
		||||
		tfo->tpg_get_wwn(se_tpg) ? tfo->tpg_get_wwn(se_tpg) : NULL,
 | 
			
		||||
		se_tpg->proto_id, tfo->tpg_get_tag(se_tpg));
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -697,14 +694,13 @@ EXPORT_SYMBOL(core_tpg_register);
 | 
			
		|||
 | 
			
		||||
int core_tpg_deregister(struct se_portal_group *se_tpg)
 | 
			
		||||
{
 | 
			
		||||
	const struct target_core_fabric_ops *tfo = se_tpg->se_tpg_tfo;
 | 
			
		||||
	struct se_node_acl *nacl, *nacl_tmp;
 | 
			
		||||
 | 
			
		||||
	pr_debug("TARGET_CORE[%s]: Deallocating %s struct se_portal_group"
 | 
			
		||||
		" for endpoint: %s Portal Tag %u\n",
 | 
			
		||||
		(se_tpg->se_tpg_type == TRANSPORT_TPG_TYPE_NORMAL) ?
 | 
			
		||||
		"Normal" : "Discovery", se_tpg->se_tpg_tfo->get_fabric_name(),
 | 
			
		||||
		se_tpg->se_tpg_tfo->tpg_get_wwn(se_tpg),
 | 
			
		||||
		se_tpg->se_tpg_tfo->tpg_get_tag(se_tpg));
 | 
			
		||||
	pr_debug("TARGET_CORE[%s]: Deallocating portal_group for endpoint: %s, "
 | 
			
		||||
		 "Proto: %d, Portal Tag: %u\n", tfo->get_fabric_name(),
 | 
			
		||||
		tfo->tpg_get_wwn(se_tpg) ? tfo->tpg_get_wwn(se_tpg) : NULL,
 | 
			
		||||
		se_tpg->proto_id, tfo->tpg_get_tag(se_tpg));
 | 
			
		||||
 | 
			
		||||
	spin_lock_bh(&tpg_lock);
 | 
			
		||||
	list_del(&se_tpg->se_tpg_node);
 | 
			
		||||
| 
						 | 
				
			
			@ -732,10 +728,9 @@ int core_tpg_deregister(struct se_portal_group *se_tpg)
 | 
			
		|||
	}
 | 
			
		||||
	spin_unlock_irq(&se_tpg->acl_node_lock);
 | 
			
		||||
 | 
			
		||||
	if (se_tpg->se_tpg_type == TRANSPORT_TPG_TYPE_NORMAL)
 | 
			
		||||
	if (se_tpg->proto_id >= 0)
 | 
			
		||||
		core_tpg_remove_lun(se_tpg, &se_tpg->tpg_virt_lun0);
 | 
			
		||||
 | 
			
		||||
	se_tpg->se_tpg_fabric_ptr = NULL;
 | 
			
		||||
	array_free(se_tpg->tpg_lun_list, TRANSPORT_MAX_LUNS_PER_TPG);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -284,7 +284,7 @@ static struct se_portal_group *ft_add_tpg(
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	ret = core_tpg_register(&ft_fabric_ops, wwn, &tpg->se_tpg,
 | 
			
		||||
				tpg, TRANSPORT_TPG_TYPE_NORMAL);
 | 
			
		||||
				SCSI_PROTOCOL_FCP);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		destroy_workqueue(wq);
 | 
			
		||||
		kfree(tpg);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1508,8 +1508,8 @@ static struct se_portal_group *usbg_make_tpg(
 | 
			
		|||
	tpg->tport = tport;
 | 
			
		||||
	tpg->tport_tpgt = tpgt;
 | 
			
		||||
 | 
			
		||||
	ret = core_tpg_register(&usbg_ops, wwn, &tpg->se_tpg, tpg,
 | 
			
		||||
				TRANSPORT_TPG_TYPE_NORMAL);
 | 
			
		||||
	ret = core_tpg_register(&usbg_ops, wwn, &tpg->se_tpg,
 | 
			
		||||
				tport->tport_proto_id);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		destroy_workqueue(tpg->workqueue);
 | 
			
		||||
		kfree(tpg);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2119,8 +2119,8 @@ vhost_scsi_make_tpg(struct se_wwn *wwn,
 | 
			
		|||
	tpg->tport = tport;
 | 
			
		||||
	tpg->tport_tpgt = tpgt;
 | 
			
		||||
 | 
			
		||||
	ret = core_tpg_register(&vhost_scsi_ops, wwn,
 | 
			
		||||
				&tpg->se_tpg, tpg, TRANSPORT_TPG_TYPE_NORMAL);
 | 
			
		||||
	ret = core_tpg_register(&vhost_scsi_ops, wwn, &tpg->se_tpg,
 | 
			
		||||
				tport->tport_proto_id);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		kfree(tpg);
 | 
			
		||||
		return NULL;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1883,8 +1883,8 @@ scsiback_make_tpg(struct se_wwn *wwn,
 | 
			
		|||
	tpg->tport = tport;
 | 
			
		||||
	tpg->tport_tpgt = tpgt;
 | 
			
		||||
 | 
			
		||||
	ret = core_tpg_register(&scsiback_ops, wwn,
 | 
			
		||||
				&tpg->se_tpg, tpg, TRANSPORT_TPG_TYPE_NORMAL);
 | 
			
		||||
	ret = core_tpg_register(&scsiback_ops, wwn, &tpg->se_tpg,
 | 
			
		||||
				tport->tport_proto_id);
 | 
			
		||||
	if (ret < 0) {
 | 
			
		||||
		kfree(tpg);
 | 
			
		||||
		return NULL;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -125,12 +125,6 @@ enum transport_lun_status_table {
 | 
			
		|||
	TRANSPORT_LUN_STATUS_ACTIVE = 1,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* struct se_portal_group->se_tpg_type */
 | 
			
		||||
enum transport_tpg_type_table {
 | 
			
		||||
	TRANSPORT_TPG_TYPE_NORMAL = 0,
 | 
			
		||||
	TRANSPORT_TPG_TYPE_DISCOVERY = 1,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Special transport agnostic struct se_cmd->t_states */
 | 
			
		||||
enum transport_state_table {
 | 
			
		||||
	TRANSPORT_NO_STATE	= 0,
 | 
			
		||||
| 
						 | 
				
			
			@ -864,8 +858,12 @@ struct se_tpg_np {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
struct se_portal_group {
 | 
			
		||||
	/* Type of target portal group, see transport_tpg_type_table */
 | 
			
		||||
	enum transport_tpg_type_table se_tpg_type;
 | 
			
		||||
	/*
 | 
			
		||||
	 * PROTOCOL IDENTIFIER value per SPC4, 7.5.1.
 | 
			
		||||
	 *
 | 
			
		||||
	 * Negative values can be used by fabric drivers for internal use TPGs.
 | 
			
		||||
	 */
 | 
			
		||||
	int			proto_id;
 | 
			
		||||
	/* Number of ACLed Initiator Nodes for this TPG */
 | 
			
		||||
	u32			num_node_acls;
 | 
			
		||||
	/* Used for PR SPEC_I_PT=1 and REGISTER_AND_MOVE */
 | 
			
		||||
| 
						 | 
				
			
			@ -875,8 +873,6 @@ struct se_portal_group {
 | 
			
		|||
	/* Spinlock for adding/removing sessions */
 | 
			
		||||
	spinlock_t		session_lock;
 | 
			
		||||
	spinlock_t		tpg_lun_lock;
 | 
			
		||||
	/* Pointer to $FABRIC_MOD portal group */
 | 
			
		||||
	void			*se_tpg_fabric_ptr;
 | 
			
		||||
	struct list_head	se_tpg_node;
 | 
			
		||||
	/* linked list for initiator ACL list */
 | 
			
		||||
	struct list_head	acl_node_list;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -175,7 +175,7 @@ int	core_tpg_set_initiator_node_queue_depth(struct se_portal_group *,
 | 
			
		|||
int	core_tpg_set_initiator_node_tag(struct se_portal_group *,
 | 
			
		||||
		struct se_node_acl *, const char *);
 | 
			
		||||
int	core_tpg_register(const struct target_core_fabric_ops *,
 | 
			
		||||
		struct se_wwn *, struct se_portal_group *, void *, int);
 | 
			
		||||
		struct se_wwn *, struct se_portal_group *, int);
 | 
			
		||||
int	core_tpg_deregister(struct se_portal_group *);
 | 
			
		||||
 | 
			
		||||
/* SAS helpers */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue