mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-17 10:41:26 +00:00
qla2xxx: Unregister chrdev if module initialization fails
If module initialization fails after the character device has been registered, unregister the character device. Additionally, avoid duplicating error path code. git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8235 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -7462,8 +7462,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(),
|
||||
@@ -7487,11 +7486,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);
|
||||
@@ -7503,27 +7501,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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user