From: Andrew Lunn <andrew@lunn.ch>
Date: Thu, 3 Dec 2015 20:12:33 +0000 (+0100)
Subject: batman-adv: Act on NETDEV_*_TYPE_CHANGE events
X-Git-Tag: v4.5-rc1~128^2~205^2
X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=a1a66b1100373ead1fa2383bc3dee42c508bb504;p=linux.git

batman-adv: Act on NETDEV_*_TYPE_CHANGE events

A network interface can change type. It may change from a type which
batman does not support, e.g. hdlc, to one it does, e.g. hdlc-eth.
When an interface changes type, it sends two notifications. Handle
these notifications.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
---

diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
index aa8867e1d983..a58184fdf5fd 100644
--- a/net/batman-adv/hard-interface.c
+++ b/net/batman-adv/hard-interface.c
@@ -709,7 +709,8 @@ static int batadv_hard_if_event(struct notifier_block *this,
 	}
 
 	hard_iface = batadv_hardif_get_by_netdev(net_dev);
-	if (!hard_iface && event == NETDEV_REGISTER)
+	if (!hard_iface && (event == NETDEV_REGISTER ||
+			    event == NETDEV_POST_TYPE_CHANGE))
 		hard_iface = batadv_hardif_add_interface(net_dev);
 
 	if (!hard_iface)
@@ -724,6 +725,7 @@ static int batadv_hard_if_event(struct notifier_block *this,
 		batadv_hardif_deactivate_interface(hard_iface);
 		break;
 	case NETDEV_UNREGISTER:
+	case NETDEV_PRE_TYPE_CHANGE:
 		list_del_rcu(&hard_iface->list);
 
 		batadv_hardif_remove_interface(hard_iface);