This patch adds checking of driver registration status and if it fails release allocated resources.
Signed-off-by: Cyrill Gorcunov <[EMAIL PROTECTED]> --- Pete, please review the patch and Ack it then. drivers/usb/misc/ftdi-elan.c | 37 +++++++++++++++++++++++-------------- 1 files changed, 23 insertions(+), 14 deletions(-) diff --git a/drivers/usb/misc/ftdi-elan.c b/drivers/usb/misc/ftdi-elan.c index bc3327e..3cd9ae3 100644 --- a/drivers/usb/misc/ftdi-elan.c +++ b/drivers/usb/misc/ftdi-elan.c @@ -2909,27 +2909,36 @@ static int __init ftdi_elan_init(void) init_MUTEX(&ftdi_module_lock); INIT_LIST_HEAD(&ftdi_static_list); status_queue = create_singlethread_workqueue("ftdi-status-control"); - if (!status_queue) - goto err1; command_queue = create_singlethread_workqueue("ftdi-command-engine"); - if (!command_queue) - goto err2; respond_queue = create_singlethread_workqueue("ftdi-respond-engine"); - if (!respond_queue) - goto err3; + if (!status_queue || !command_queue || !respond_queue) { + printk(KERN_ERR "%s couldn't create workqueue\n", + ftdi_elan_driver.name); + result = -ENOMEM; + goto err; + } result = usb_register(&ftdi_elan_driver); - if (result) + if (result) { printk(KERN_ERR "usb_register failed. Error number %d\n", result); + goto err; + } return result; - err3: - destroy_workqueue(command_queue); - err2: - destroy_workqueue(status_queue); - err1: - printk(KERN_ERR "%s couldn't create workqueue\n", ftdi_elan_driver.name); - return -ENOMEM; + err: + if (status_queue) { + destroy_workqueue(status_queue); + status_queue = NULL; + } + if (command_queue) { + destroy_workqueue(command_queue); + command_queue = NULL; + } + if (respond_queue) { + destroy_workqueue(respond_queue); + respond_queue = NULL; + } + return result; } static void __exit ftdi_elan_exit(void) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/