diff options
author | dmitry_yus <dmitry_yus@d7303112-9cec-0310-bdd2-e83a94d6c2b6> | 2005-03-12 19:55:44 +0000 |
---|---|---|
committer | dmitry_yus <dmitry_yus@d7303112-9cec-0310-bdd2-e83a94d6c2b6> | 2005-03-12 19:55:44 +0000 |
commit | 7c20bedf36afc39c8fc48dc325f35fadc866f4ef (patch) | |
tree | efd8b4eca104255968a1ec8a30d6c6e1c98c9371 /kernel | |
parent | 9cafc82b6c62ab4c96882e003def43f7e56eb617 (diff) | |
download | open-iscsi-7c20bedf36afc39c8fc48dc325f35fadc866f4ef.tar.gz |
refcounting on session create/destroy fix.
git-svn-id: svn://svn.berlios.de/open-iscsi@182 d7303112-9cec-0310-bdd2-e83a94d6c2b6
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/iscsi_tcp.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/kernel/iscsi_tcp.c b/kernel/iscsi_tcp.c index 0dfdd86..ca4f8e2 100644 --- a/kernel/iscsi_tcp.c +++ b/kernel/iscsi_tcp.c @@ -2518,7 +2518,7 @@ iscsi_session_create(iscsi_snx_h handle, uint32_t initial_cmdsn, host = scsi_host_alloc(&iscsi_sht, sizeof(struct iscsi_session)); if (host == NULL) { - printk("can not allocate SCSI host for session %p\n", + printk("iSCSI: can not allocate SCSI host for session %p\n", iscsi_ptr(handle)); goto host_alloc_fault; } @@ -2567,12 +2567,18 @@ iscsi_session_create(iscsi_snx_h handle, uint32_t initial_cmdsn, res = scsi_add_host(host, NULL); if (res) { - printk("can not add host_no %d (%d)\n", *host_no, res); + printk("iSCSI: can not add host_no %d (%d)\n", *host_no, res); goto add_host_fault; } + if (!try_module_get(THIS_MODULE)) { + printk("iSCSI: can not reserve module\n"); + goto module_get_fault; + } + return iscsi_handle(session); +module_get_fault: add_host_fault: iscsi_r2tpool_free(session); r2tpool_alloc_fault: @@ -2612,6 +2618,7 @@ iscsi_session_destroy(iscsi_snx_h snxh) iscsi_pool_free(&session->immpool, (void**)session->imm_cmds); iscsi_pool_free(&session->cmdpool, (void**)session->cmds); scsi_host_put(session->host); + module_put(THIS_MODULE); } static int |