aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/libiscsi.c2
-rw-r--r--drivers/scsi/scsi_transport_iscsi.c14
-rw-r--r--include/scsi/scsi_transport_iscsi.h7
3 files changed, 12 insertions, 11 deletions
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
index 499e79f0cac5..7e6e031cc41b 100644
--- a/drivers/scsi/libiscsi.c
+++ b/drivers/scsi/libiscsi.c
@@ -1290,7 +1290,7 @@ iscsi_session_setup(struct iscsi_transport *iscsit,
1290 if (!try_module_get(iscsit->owner)) 1290 if (!try_module_get(iscsit->owner))
1291 goto cls_session_fail; 1291 goto cls_session_fail;
1292 1292
1293 cls_session = iscsi_create_session(shost, iscsit); 1293 cls_session = iscsi_create_session(shost, iscsit, 0);
1294 if (!cls_session) 1294 if (!cls_session)
1295 goto module_put; 1295 goto module_put;
1296 *(unsigned long*)shost->hostdata = (unsigned long)cls_session; 1296 *(unsigned long*)shost->hostdata = (unsigned long)cls_session;
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
index f39da0cf5f18..7963c0538de5 100644
--- a/drivers/scsi/scsi_transport_iscsi.c
+++ b/drivers/scsi/scsi_transport_iscsi.c
@@ -304,6 +304,8 @@ iscsi_alloc_session(struct Scsi_Host *shost,
304 INIT_LIST_HEAD(&session->host_list); 304 INIT_LIST_HEAD(&session->host_list);
305 INIT_LIST_HEAD(&session->sess_list); 305 INIT_LIST_HEAD(&session->sess_list);
306 306
307 /* this is released in the dev's release function */
308 scsi_host_get(shost);
307 session->dev.parent = &shost->shost_gendev; 309 session->dev.parent = &shost->shost_gendev;
308 session->dev.release = iscsi_session_release; 310 session->dev.release = iscsi_session_release;
309 device_initialize(&session->dev); 311 device_initialize(&session->dev);
@@ -313,18 +315,15 @@ iscsi_alloc_session(struct Scsi_Host *shost,
313} 315}
314EXPORT_SYMBOL_GPL(iscsi_alloc_session); 316EXPORT_SYMBOL_GPL(iscsi_alloc_session);
315 317
316int iscsi_add_session(struct iscsi_cls_session *session) 318int iscsi_add_session(struct iscsi_cls_session *session, unsigned int target_id)
317{ 319{
318 struct Scsi_Host *shost = iscsi_session_to_shost(session); 320 struct Scsi_Host *shost = iscsi_session_to_shost(session);
319 struct iscsi_host *ihost; 321 struct iscsi_host *ihost;
320 int err; 322 int err;
321 323
322 /* this is released in the dev's release function */
323 scsi_host_get(shost);
324 ihost = shost->shost_data; 324 ihost = shost->shost_data;
325
326 session->sid = iscsi_session_nr++; 325 session->sid = iscsi_session_nr++;
327 session->target_id = ihost->next_target_id++; 326 session->target_id = target_id;
328 327
329 snprintf(session->dev.bus_id, BUS_ID_SIZE, "session%u", 328 snprintf(session->dev.bus_id, BUS_ID_SIZE, "session%u",
330 session->sid); 329 session->sid);
@@ -356,7 +355,8 @@ EXPORT_SYMBOL_GPL(iscsi_add_session);
356 **/ 355 **/
357struct iscsi_cls_session * 356struct iscsi_cls_session *
358iscsi_create_session(struct Scsi_Host *shost, 357iscsi_create_session(struct Scsi_Host *shost,
359 struct iscsi_transport *transport) 358 struct iscsi_transport *transport,
359 unsigned int target_id)
360{ 360{
361 struct iscsi_cls_session *session; 361 struct iscsi_cls_session *session;
362 362
@@ -364,7 +364,7 @@ iscsi_create_session(struct Scsi_Host *shost,
364 if (!session) 364 if (!session)
365 return NULL; 365 return NULL;
366 366
367 if (iscsi_add_session(session)) { 367 if (iscsi_add_session(session, target_id)) {
368 iscsi_free_session(session); 368 iscsi_free_session(session);
369 return NULL; 369 return NULL;
370 } 370 }
diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h
index 53493d591355..f7b0db5f2f5b 100644
--- a/include/scsi/scsi_transport_iscsi.h
+++ b/include/scsi/scsi_transport_iscsi.h
@@ -203,7 +203,6 @@ struct iscsi_cls_session {
203 iscsi_dev_to_session(_stgt->dev.parent) 203 iscsi_dev_to_session(_stgt->dev.parent)
204 204
205struct iscsi_host { 205struct iscsi_host {
206 int next_target_id;
207 struct list_head sessions; 206 struct list_head sessions;
208 struct mutex mutex; 207 struct mutex mutex;
209}; 208};
@@ -213,9 +212,11 @@ struct iscsi_host {
213 */ 212 */
214extern struct iscsi_cls_session *iscsi_alloc_session(struct Scsi_Host *shost, 213extern struct iscsi_cls_session *iscsi_alloc_session(struct Scsi_Host *shost,
215 struct iscsi_transport *transport); 214 struct iscsi_transport *transport);
216extern int iscsi_add_session(struct iscsi_cls_session *session); 215extern int iscsi_add_session(struct iscsi_cls_session *session,
216 unsigned int target_id);
217extern struct iscsi_cls_session *iscsi_create_session(struct Scsi_Host *shost, 217extern struct iscsi_cls_session *iscsi_create_session(struct Scsi_Host *shost,
218 struct iscsi_transport *t); 218 struct iscsi_transport *t,
219 unsigned int target_id);
219extern void iscsi_remove_session(struct iscsi_cls_session *session); 220extern void iscsi_remove_session(struct iscsi_cls_session *session);
220extern void iscsi_free_session(struct iscsi_cls_session *session); 221extern void iscsi_free_session(struct iscsi_cls_session *session);
221extern int iscsi_destroy_session(struct iscsi_cls_session *session); 222extern int iscsi_destroy_session(struct iscsi_cls_session *session);