batman-adv: use unregister_netdevice() when softif_create fails
Commit Message
When entering softif_create(), the rtnl lock has already been acquired
by store_mesh_iface().
(store_mesh_iface() -> hardif_enable_interface() -> softif_create)
In case of an error, we should therefore call unregister_netdevice()
instead of unregister_netdev().
unregister_netdev() tries to acquire the rtnl lock itself and deadlocks
in this situation. unregister_netdevice() assumes that the rtnl lock
is already been held.
Signed-off-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
---
soft-interface.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
Comments
On Monday, November 07, 2011 20:57:48 Simon Wunderlich wrote:
> When entering softif_create(), the rtnl lock has already been acquired
> by store_mesh_iface().
> (store_mesh_iface() -> hardif_enable_interface() -> softif_create)
>
> In case of an error, we should therefore call unregister_netdevice()
> instead of unregister_netdev().
>
> unregister_netdev() tries to acquire the rtnl lock itself and deadlocks
> in this situation. unregister_netdevice() assumes that the rtnl lock
> is already been held.
Applied in revision c103efd.
Thanks,
Marek
@@ -874,7 +874,7 @@ unreg_debugfs:
unreg_sysfs:
sysfs_del_meshif(soft_iface);
unreg_soft_iface:
- unregister_netdev(soft_iface);
+ unregister_netdevice(soft_iface);
return NULL;
free_soft_iface: