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 ?
Cheers, Marek