aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/target/iscsi/iscsi_target_tq.c19
1 files changed, 3 insertions, 16 deletions
diff --git a/drivers/target/iscsi/iscsi_target_tq.c b/drivers/target/iscsi/iscsi_target_tq.c
index ba0ac41889af..151a585a0895 100644
--- a/drivers/target/iscsi/iscsi_target_tq.c
+++ b/drivers/target/iscsi/iscsi_target_tq.c
@@ -222,25 +222,12 @@ void iscsi_activate_thread_set(struct iscsi_conn *conn, struct iscsi_thread_set
222 222
223struct iscsi_thread_set *iscsi_get_thread_set(void) 223struct iscsi_thread_set *iscsi_get_thread_set(void)
224{ 224{
225 int allocate_ts = 0; 225 struct iscsi_thread_set *ts;
226 struct completion comp; 226
227 struct iscsi_thread_set *ts = NULL;
228 /*
229 * If no inactive thread set is available on the first call to
230 * iscsi_get_ts_from_inactive_list(), sleep for a second and
231 * try again. If still none are available after two attempts,
232 * allocate a set ourselves.
233 */
234get_set: 227get_set:
235 ts = iscsi_get_ts_from_inactive_list(); 228 ts = iscsi_get_ts_from_inactive_list();
236 if (!ts) { 229 if (!ts) {
237 if (allocate_ts == 2) 230 iscsi_allocate_thread_sets(1);
238 iscsi_allocate_thread_sets(1);
239
240 init_completion(&comp);
241 wait_for_completion_timeout(&comp, 1 * HZ);
242
243 allocate_ts++;
244 goto get_set; 231 goto get_set;
245 } 232 }
246 233