[maint,1/6] batman-adv: Clean up untagged vlan when destroying via rtnl-link

Message ID 1464439110-3113-1-git-send-email-sven@narfation.org (mailing list archive)
State Accepted, archived
Commit e721749d57ff57d6df4017d62797626eab9902f1
Delegated to: Marek Lindner
Headers

Commit Message

Sven Eckelmann May 28, 2016, 12:38 p.m. UTC
  The untagged vlan object is only destroyed when the interface is removed
via the legacy sysfs interface. But it also has to be destroyed when the
standard rtnl-link interface is used.

Fixes: 952cebb57518 ("batman-adv: add per VLAN interface attribute framework")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Cc: Antonio Quartulli <a@unstable.cc>
---
 net/batman-adv/soft-interface.c | 9 +++++++++
 1 file changed, 9 insertions(+)
  

Comments

Antonio Quartulli June 6, 2016, 3:44 p.m. UTC | #1
On Sat, May 28, 2016 at 02:38:26PM +0200, Sven Eckelmann wrote:
> The untagged vlan object is only destroyed when the interface is removed
> via the legacy sysfs interface. But it also has to be destroyed when the
> standard rtnl-link interface is used.
> 
> Fixes: 952cebb57518 ("batman-adv: add per VLAN interface attribute framework")
> Signed-off-by: Sven Eckelmann <sven@narfation.org>
> Cc: Antonio Quartulli <a@unstable.cc>

Acked-by: Antonio Quartulli <a@unstable.cc>
  
Marek Lindner June 6, 2016, 3:46 p.m. UTC | #2
On Monday, June 06, 2016 23:44:02 Antonio Quartulli wrote:
> On Sat, May 28, 2016 at 02:38:26PM +0200, Sven Eckelmann wrote:
> > The untagged vlan object is only destroyed when the interface is removed
> > via the legacy sysfs interface. But it also has to be destroyed when the
> > standard rtnl-link interface is used.
> >
> > 
> >
> > Fixes: 952cebb57518 ("batman-adv: add per VLAN interface attribute
> > framework") Signed-off-by: Sven Eckelmann <sven@narfation.org>
> > Cc: Antonio Quartulli <a@unstable.cc>
> 
> Acked-by: Antonio Quartulli <a@unstable.cc>

Applied in revision e721749.

Thanks,
Marek
  

Patch

diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index 18b6d07..7527c06 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -1040,7 +1040,9 @@  void batadv_softif_destroy_sysfs(struct net_device *soft_iface)
 static void batadv_softif_destroy_netlink(struct net_device *soft_iface,
 					  struct list_head *head)
 {
+	struct batadv_priv *bat_priv = netdev_priv(soft_iface);
 	struct batadv_hard_iface *hard_iface;
+	struct batadv_softif_vlan *vlan;
 
 	list_for_each_entry(hard_iface, &batadv_hardif_list, list) {
 		if (hard_iface->soft_iface == soft_iface)
@@ -1048,6 +1050,13 @@  static void batadv_softif_destroy_netlink(struct net_device *soft_iface,
 							BATADV_IF_CLEANUP_KEEP);
 	}
 
+	/* destroy the "untagged" VLAN */
+	vlan = batadv_softif_vlan_get(bat_priv, BATADV_NO_FLAGS);
+	if (vlan) {
+		batadv_softif_destroy_vlan(bat_priv, vlan);
+		batadv_softif_vlan_put(vlan);
+	}
+
 	batadv_sysfs_del_meshif(soft_iface);
 	unregister_netdevice_queue(soft_iface, head);
 }