diff options
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/libiscsi.c | 8 | ||||
-rw-r--r-- | drivers/scsi/scsi_transport_iscsi.c | 10 |
2 files changed, 9 insertions, 9 deletions
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c index 7c76a989b218..7e6e031cc41b 100644 --- a/drivers/scsi/libiscsi.c +++ b/drivers/scsi/libiscsi.c | |||
@@ -1287,13 +1287,18 @@ iscsi_session_setup(struct iscsi_transport *iscsit, | |||
1287 | if (scsi_add_host(shost, NULL)) | 1287 | if (scsi_add_host(shost, NULL)) |
1288 | goto add_host_fail; | 1288 | goto add_host_fail; |
1289 | 1289 | ||
1290 | if (!try_module_get(iscsit->owner)) | ||
1291 | goto cls_session_fail; | ||
1292 | |||
1290 | cls_session = iscsi_create_session(shost, iscsit, 0); | 1293 | cls_session = iscsi_create_session(shost, iscsit, 0); |
1291 | if (!cls_session) | 1294 | if (!cls_session) |
1292 | goto cls_session_fail; | 1295 | goto module_put; |
1293 | *(unsigned long*)shost->hostdata = (unsigned long)cls_session; | 1296 | *(unsigned long*)shost->hostdata = (unsigned long)cls_session; |
1294 | 1297 | ||
1295 | return cls_session; | 1298 | return cls_session; |
1296 | 1299 | ||
1300 | module_put: | ||
1301 | module_put(iscsit->owner); | ||
1297 | cls_session_fail: | 1302 | cls_session_fail: |
1298 | scsi_remove_host(shost); | 1303 | scsi_remove_host(shost); |
1299 | add_host_fail: | 1304 | add_host_fail: |
@@ -1325,6 +1330,7 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session) | |||
1325 | 1330 | ||
1326 | iscsi_destroy_session(cls_session); | 1331 | iscsi_destroy_session(cls_session); |
1327 | scsi_host_put(shost); | 1332 | scsi_host_put(shost); |
1333 | module_put(cls_session->transport->owner); | ||
1328 | } | 1334 | } |
1329 | EXPORT_SYMBOL_GPL(iscsi_session_teardown); | 1335 | EXPORT_SYMBOL_GPL(iscsi_session_teardown); |
1330 | 1336 | ||
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c index 147c854e1d4d..8717ff51ba4b 100644 --- a/drivers/scsi/scsi_transport_iscsi.c +++ b/drivers/scsi/scsi_transport_iscsi.c | |||
@@ -228,13 +228,11 @@ static struct iscsi_cls_conn *iscsi_conn_lookup(uint32_t sid, uint32_t cid) | |||
228 | static void iscsi_session_release(struct device *dev) | 228 | static void iscsi_session_release(struct device *dev) |
229 | { | 229 | { |
230 | struct iscsi_cls_session *session = iscsi_dev_to_session(dev); | 230 | struct iscsi_cls_session *session = iscsi_dev_to_session(dev); |
231 | struct iscsi_transport *transport = session->transport; | ||
232 | struct Scsi_Host *shost; | 231 | struct Scsi_Host *shost; |
233 | 232 | ||
234 | shost = iscsi_session_to_shost(session); | 233 | shost = iscsi_session_to_shost(session); |
235 | scsi_host_put(shost); | 234 | scsi_host_put(shost); |
236 | kfree(session); | 235 | kfree(session); |
237 | module_put(transport->owner); | ||
238 | } | 236 | } |
239 | 237 | ||
240 | static int iscsi_is_session_dev(const struct device *dev) | 238 | static int iscsi_is_session_dev(const struct device *dev) |
@@ -305,13 +303,11 @@ iscsi_create_session(struct Scsi_Host *shost, | |||
305 | struct iscsi_cls_session *session; | 303 | struct iscsi_cls_session *session; |
306 | int err; | 304 | int err; |
307 | 305 | ||
308 | if (!try_module_get(transport->owner)) | ||
309 | return NULL; | ||
310 | |||
311 | session = kzalloc(sizeof(*session) + transport->sessiondata_size, | 306 | session = kzalloc(sizeof(*session) + transport->sessiondata_size, |
312 | GFP_KERNEL); | 307 | GFP_KERNEL); |
313 | if (!session) | 308 | if (!session) |
314 | goto module_put; | 309 | return NULL; |
310 | |||
315 | session->transport = transport; | 311 | session->transport = transport; |
316 | session->recovery_tmo = 120; | 312 | session->recovery_tmo = 120; |
317 | INIT_WORK(&session->recovery_work, session_recovery_timedout, session); | 313 | INIT_WORK(&session->recovery_work, session_recovery_timedout, session); |
@@ -349,8 +345,6 @@ iscsi_create_session(struct Scsi_Host *shost, | |||
349 | 345 | ||
350 | free_session: | 346 | free_session: |
351 | kfree(session); | 347 | kfree(session); |
352 | module_put: | ||
353 | module_put(transport->owner); | ||
354 | return NULL; | 348 | return NULL; |
355 | } | 349 | } |
356 | 350 | ||