diff options
Diffstat (limited to 'drivers/target/iscsi/iscsi_target.c')
-rw-r--r-- | drivers/target/iscsi/iscsi_target.c | 15 |
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 | ||