[RFC PATCH 3/4] target: use ida for acl index

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

 



This just uses a ida for the acl index, so we avoid collisions
if we ever rollover.

Signed-off-by: Mike Christie <mchristi@xxxxxxxxxx>
---
 drivers/target/target_core_tpg.c  | 13 ++++++++++++-
 include/target/target_core_base.h |  1 -
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/drivers/target/target_core_tpg.c b/drivers/target/target_core_tpg.c
index 1b2b60e..61d3f2b 100644
--- a/drivers/target/target_core_tpg.c
+++ b/drivers/target/target_core_tpg.c
@@ -47,6 +47,7 @@ extern struct se_device *g_lun0_dev;
 
 static DEFINE_SPINLOCK(tpg_lock);
 static LIST_HEAD(tpg_list);
+static DEFINE_IDA(acl_index_ida);
 
 /*	__core_tpg_get_initiator_node_acl():
  *
@@ -187,12 +188,18 @@ static struct se_node_acl *target_alloc_node_acl(struct se_portal_group *tpg,
 {
 	struct se_node_acl *acl;
 	u32 queue_depth;
+	int ret;
 
 	acl = kzalloc(max(sizeof(*acl), tpg->se_tpg_tfo->node_acl_size),
 			GFP_KERNEL);
 	if (!acl)
 		return NULL;
 
+	ret = ida_simple_get_cyclic(&acl_index_ida, 0, 0, GFP_KERNEL);
+	if (ret < 0)
+		goto free_acl;
+	acl->acl_index = ret;
+
 	INIT_LIST_HEAD(&acl->acl_list);
 	INIT_LIST_HEAD(&acl->acl_sess_list);
 	INIT_HLIST_HEAD(&acl->lun_entry_hlist);
@@ -210,11 +217,14 @@ static struct se_node_acl *target_alloc_node_acl(struct se_portal_group *tpg,
 
 	snprintf(acl->initiatorname, TRANSPORT_IQN_LEN, "%s", initiatorname);
 	acl->se_tpg = tpg;
-	acl->acl_index = scsi_get_new_index(SCSI_AUTH_INTR_INDEX);
 
 	tpg->se_tpg_tfo->set_default_node_attributes(acl);
 
 	return acl;
+
+free_acl:
+	kfree(acl);
+	return NULL;
 }
 
 static void target_add_node_acl(struct se_node_acl *acl)
@@ -382,6 +392,7 @@ void core_tpg_del_initiator_node_acl(struct se_node_acl *acl)
 
 	core_tpg_wait_for_nacl_pr_ref(acl);
 	core_free_device_list_for_node(acl, tpg);
+	ida_simple_remove(&acl_index_ida, acl->acl_index);
 
 	pr_debug("%s_TPG[%hu] - Deleted ACL with TCQ Depth: %d for %s"
 		" Initiator Node: %s\n", tpg->se_tpg_tfo->get_fabric_name(),
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
index 19ec189..d275a39 100644
--- a/include/target/target_core_base.h
+++ b/include/target/target_core_base.h
@@ -219,7 +219,6 @@ enum tcm_tmrsp_table {
  */
 typedef enum {
 	SCSI_INST_INDEX,
-	SCSI_AUTH_INTR_INDEX,
 	SCSI_INDEX_TYPE_MAX
 } scsi_index_t;
 
-- 
2.7.2

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