On Sun, Jan 11, 2015 at 08:38:10PM +0800, Marek Lindner wrote: > On Friday 26 December 2014 12:41:22 Markus Pargmann wrote: > > static int __init batadv_init(void) > > { > > + int ret; > > + > > INIT_LIST_HEAD(&batadv_hardif_list); > > INIT_HLIST_HEAD(&batadv_algo_list); > > > > batadv_recv_handler_init(); > > > > - batadv_iv_init(); > > - batadv_nc_init(); > > + ret = batadv_iv_init(); > > + if (ret) > > + return ret; > > + > > + ret = batadv_nc_init(); > > + if (ret) > > + return ret; > > > > batadv_event_workqueue = > > create_singlethread_workqueue("bat_events"); - > > if (!batadv_event_workqueue) > > return -ENOMEM; > > > > batadv_socket_init(); > > batadv_debugfs_init(); > > > > - register_netdevice_notifier(&batadv_hard_if_notifier); > > - rtnl_link_register(&batadv_link_ops); > > + ret = register_netdevice_notifier(&batadv_hard_if_notifier); > > + if (ret) > > + goto err_netdev_notifier; > > + > > + ret = rtnl_link_register(&batadv_link_ops); > > + if (ret) > > + goto err_link_register; > > > > pr_info("B.A.T.M.A.N. advanced %s (compatibility version %i) > > loaded\n", BATADV_SOURCE_VERSION, BATADV_COMPAT_VERSION); > > > > return 0; > > + > > +err_link_register: > > + unregister_netdevice_notifier(&batadv_hard_if_notifier); > > +err_netdev_notifier: > > + batadv_debugfs_destroy(); > > + > > + return ret; > > } > > To be truely clean, I guess the workqueue should be destroyed as well ? Yes, thanks, added destroy_workqueue() for v3. Best Regards, Markus -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |