aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target/iscsi/iscsi_target.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/target/iscsi/iscsi_target.c')
-rw-r--r--drivers/target/iscsi/iscsi_target.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index 23a98e658306..9435a3d369a7 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -144,23 +144,24 @@ struct iscsi_tiqn *iscsit_add_tiqn(unsigned char *buf)
144 spin_lock_init(&tiqn->login_stats.lock); 144 spin_lock_init(&tiqn->login_stats.lock);
145 spin_lock_init(&tiqn->logout_stats.lock); 145 spin_lock_init(&tiqn->logout_stats.lock);
146 146
147 if (!idr_pre_get(&tiqn_idr, GFP_KERNEL)) {
148 pr_err("idr_pre_get() for tiqn_idr failed\n");
149 kfree(tiqn);
150 return ERR_PTR(-ENOMEM);
151 }
152 tiqn->tiqn_state = TIQN_STATE_ACTIVE; 147 tiqn->tiqn_state = TIQN_STATE_ACTIVE;
153 148
149 idr_preload(GFP_KERNEL);
154 spin_lock(&tiqn_lock); 150 spin_lock(&tiqn_lock);
155 ret = idr_get_new(&tiqn_idr, NULL, &tiqn->tiqn_index); 151
152 ret = idr_alloc(&tiqn_idr, NULL, 0, 0, GFP_NOWAIT);
156 if (ret < 0) { 153 if (ret < 0) {
157 pr_err("idr_get_new() failed for tiqn->tiqn_index\n"); 154 pr_err("idr_alloc() failed for tiqn->tiqn_index\n");
158 spin_unlock(&tiqn_lock); 155 spin_unlock(&tiqn_lock);
156 idr_preload_end();
159 kfree(tiqn); 157 kfree(tiqn);
160 return ERR_PTR(ret); 158 return ERR_PTR(ret);
161 } 159 }
160 tiqn->tiqn_index = ret;
162 list_add_tail(&tiqn->tiqn_list, &g_tiqn_list); 161 list_add_tail(&tiqn->tiqn_list, &g_tiqn_list);
162
163 spin_unlock(&tiqn_lock); 163 spin_unlock(&tiqn_lock);
164 idr_preload_end();
164 165
165 pr_debug("CORE[0] - Added iSCSI Target IQN: %s\n", tiqn->tiqn); 166 pr_debug("CORE[0] - Added iSCSI Target IQN: %s\n", tiqn->tiqn);
166 167