@@ -447,7 +447,7 @@ void batadv_hardif_disable_interface(struct batadv_hard_iface *hard_iface,
/* nobody uses this interface anymore */
if (!bat_priv->num_ifaces && autodel == BATADV_IF_CLEANUP_AUTO)
- batadv_softif_destroy(hard_iface->soft_iface);
+ batadv_softif_destroy(hard_iface->soft_iface, NULL);
hard_iface->soft_iface = NULL;
batadv_hardif_free_ref(hard_iface);
@@ -544,7 +544,8 @@ struct net_device *batadv_softif_create(const char *name)
return soft_iface;
}
-void batadv_softif_destroy(struct net_device *soft_iface)
+void batadv_softif_destroy(struct net_device *soft_iface,
+ struct list_head *head)
{
struct batadv_hard_iface *hard_iface;
@@ -555,7 +556,7 @@ void batadv_softif_destroy(struct net_device *soft_iface)
}
batadv_sysfs_del_meshif(soft_iface);
- unregister_netdevice(soft_iface);
+ unregister_netdevice_queue(soft_iface, head);
}
int batadv_softif_is_valid(const struct net_device *net_dev)
@@ -25,7 +25,8 @@ void batadv_interface_rx(struct net_device *soft_iface,
struct sk_buff *skb, struct batadv_hard_iface *recv_if,
int hdr_size, struct batadv_orig_node *orig_node);
struct net_device *batadv_softif_create(const char *name);
-void batadv_softif_destroy(struct net_device *soft_iface);
+void batadv_softif_destroy(struct net_device *soft_iface,
+ struct list_head *head);
int batadv_softif_is_valid(const struct net_device *net_dev);
#endif /* _NET_BATMAN_ADV_SOFT_INTERFACE_H_ */
The caller of batadv_softif_destroy may want to postpone the unregistration of the soft-interface. This is necessary when the rtnl_link configuration hooks are used. Signed-off-by: Sven Eckelmann <sven@narfation.org> --- net/batman-adv/hard-interface.c | 2 +- net/batman-adv/soft-interface.c | 5 +++-- net/batman-adv/soft-interface.h | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-)