scsi: qla2xxx: Unregister chrdev if module initialization fails
[ Upstream commit c794d24ec9eb6658909955772e70f34bef5b5b91 ] If module initialization fails after the character device has been registered, unregister the character device. Additionally, avoid duplicating error path code. Cc: Himanshu Madhani <hmadhani@marvell.com> Cc: Giridhar Malavali <giridhar.malavali@qlogic.com> Fixes: 6a03b4cd78f3 ("[SCSI] qla2xxx: Add char device to increase driver use count") # v2.6.35. Signed-off-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
4e285c97a2
commit
f8899ad454
|
@ -5780,8 +5780,7 @@ qla2x00_module_init(void)
|
|||
/* Initialize target kmem_cache and mem_pools */
|
||||
ret = qlt_init();
|
||||
if (ret < 0) {
|
||||
kmem_cache_destroy(srb_cachep);
|
||||
return ret;
|
||||
goto destroy_cache;
|
||||
} else if (ret > 0) {
|
||||
/*
|
||||
* If initiator mode is explictly disabled by qlt_init(),
|
||||
|
@ -5800,11 +5799,10 @@ qla2x00_module_init(void)
|
|||
qla2xxx_transport_template =
|
||||
fc_attach_transport(&qla2xxx_transport_functions);
|
||||
if (!qla2xxx_transport_template) {
|
||||
kmem_cache_destroy(srb_cachep);
|
||||
ql_log(ql_log_fatal, NULL, 0x0002,
|
||||
"fc_attach_transport failed...Failing load!.\n");
|
||||
qlt_exit();
|
||||
return -ENODEV;
|
||||
ret = -ENODEV;
|
||||
goto qlt_exit;
|
||||
}
|
||||
|
||||
apidev_major = register_chrdev(0, QLA2XXX_APIDEV, &apidev_fops);
|
||||
|
@ -5816,27 +5814,37 @@ qla2x00_module_init(void)
|
|||
qla2xxx_transport_vport_template =
|
||||
fc_attach_transport(&qla2xxx_transport_vport_functions);
|
||||
if (!qla2xxx_transport_vport_template) {
|
||||
kmem_cache_destroy(srb_cachep);
|
||||
qlt_exit();
|
||||
fc_release_transport(qla2xxx_transport_template);
|
||||
ql_log(ql_log_fatal, NULL, 0x0004,
|
||||
"fc_attach_transport vport failed...Failing load!.\n");
|
||||
return -ENODEV;
|
||||
ret = -ENODEV;
|
||||
goto unreg_chrdev;
|
||||
}
|
||||
ql_log(ql_log_info, NULL, 0x0005,
|
||||
"QLogic Fibre Channel HBA Driver: %s.\n",
|
||||
qla2x00_version_str);
|
||||
ret = pci_register_driver(&qla2xxx_pci_driver);
|
||||
if (ret) {
|
||||
kmem_cache_destroy(srb_cachep);
|
||||
qlt_exit();
|
||||
fc_release_transport(qla2xxx_transport_template);
|
||||
fc_release_transport(qla2xxx_transport_vport_template);
|
||||
ql_log(ql_log_fatal, NULL, 0x0006,
|
||||
"pci_register_driver failed...ret=%d Failing load!.\n",
|
||||
ret);
|
||||
goto release_vport_transport;
|
||||
}
|
||||
return ret;
|
||||
|
||||
release_vport_transport:
|
||||
fc_release_transport(qla2xxx_transport_vport_template);
|
||||
|
||||
unreg_chrdev:
|
||||
if (apidev_major >= 0)
|
||||
unregister_chrdev(apidev_major, QLA2XXX_APIDEV);
|
||||
fc_release_transport(qla2xxx_transport_template);
|
||||
|
||||
qlt_exit:
|
||||
qlt_exit();
|
||||
|
||||
destroy_cache:
|
||||
kmem_cache_destroy(srb_cachep);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue
Block a user