summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/bonding/bond_main.c2
-rw-r--r--drivers/net/team/team.c2
-rw-r--r--drivers/net/vrf.c2
-rw-r--r--include/linux/netdevice.h3
-rw-r--r--net/batman-adv/hard-interface.c2
-rw-r--r--net/bridge/br_if.c2
-rw-r--r--net/core/dev.c11
-rw-r--r--net/openvswitch/vport-netdev.c2
8 files changed, 15 insertions, 11 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 924015729b2d..fa3ed1d8a12d 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1204,7 +1204,7 @@ static int bond_master_upper_dev_link(struct net_device *bond_dev,
1204{ 1204{
1205 int err; 1205 int err;
1206 1206
1207 err = netdev_master_upper_dev_link(slave_dev, bond_dev, slave); 1207 err = netdev_master_upper_dev_link(slave_dev, bond_dev, slave, NULL);
1208 if (err) 1208 if (err)
1209 return err; 1209 return err;
1210 slave_dev->flags |= IFF_SLAVE; 1210 slave_dev->flags |= IFF_SLAVE;
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index b37f8d14dca0..f7b6ff7948b8 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -1083,7 +1083,7 @@ static int team_upper_dev_link(struct net_device *dev,
1083{ 1083{
1084 int err; 1084 int err;
1085 1085
1086 err = netdev_master_upper_dev_link(port_dev, dev, NULL); 1086 err = netdev_master_upper_dev_link(port_dev, dev, NULL, NULL);
1087 if (err) 1087 if (err)
1088 return err; 1088 return err;
1089 port_dev->priv_flags |= IFF_TEAM_PORT; 1089 port_dev->priv_flags |= IFF_TEAM_PORT;
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
index 59c5bddeaedd..8944a49cda15 100644
--- a/drivers/net/vrf.c
+++ b/drivers/net/vrf.c
@@ -624,7 +624,7 @@ static int do_vrf_add_slave(struct net_device *dev, struct net_device *port_dev)
624 goto out_fail; 624 goto out_fail;
625 } 625 }
626 626
627 ret = netdev_master_upper_dev_link(port_dev, dev, NULL); 627 ret = netdev_master_upper_dev_link(port_dev, dev, NULL, NULL);
628 if (ret < 0) 628 if (ret < 0)
629 goto out_unregister; 629 goto out_unregister;
630 630
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 939b8f3de810..aea556c64f2c 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -2163,6 +2163,7 @@ struct netdev_notifier_changeupper_info {
2163 struct net_device *upper_dev; /* new upper dev */ 2163 struct net_device *upper_dev; /* new upper dev */
2164 bool master; /* is upper dev master */ 2164 bool master; /* is upper dev master */
2165 bool linking; /* is the nofication for link or unlink */ 2165 bool linking; /* is the nofication for link or unlink */
2166 void *upper_info; /* upper dev info */
2166}; 2167};
2167 2168
2168static inline void netdev_notifier_info_init(struct netdev_notifier_info *info, 2169static inline void netdev_notifier_info_init(struct netdev_notifier_info *info,
@@ -3620,7 +3621,7 @@ struct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev);
3620int netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev); 3621int netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev);
3621int netdev_master_upper_dev_link(struct net_device *dev, 3622int netdev_master_upper_dev_link(struct net_device *dev,
3622 struct net_device *upper_dev, 3623 struct net_device *upper_dev,
3623 void *upper_priv); 3624 void *upper_priv, void *upper_info);
3624void netdev_upper_dev_unlink(struct net_device *dev, 3625void netdev_upper_dev_unlink(struct net_device *dev,
3625 struct net_device *upper_dev); 3626 struct net_device *upper_dev);
3626void netdev_adjacent_rename_links(struct net_device *dev, char *oldname); 3627void netdev_adjacent_rename_links(struct net_device *dev, char *oldname);
diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
index a7f4f1085dbb..aa8867e1d983 100644
--- a/net/batman-adv/hard-interface.c
+++ b/net/batman-adv/hard-interface.c
@@ -465,7 +465,7 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface,
465 bat_priv = netdev_priv(hard_iface->soft_iface); 465 bat_priv = netdev_priv(hard_iface->soft_iface);
466 466
467 ret = netdev_master_upper_dev_link(hard_iface->net_dev, 467 ret = netdev_master_upper_dev_link(hard_iface->net_dev,
468 soft_iface, NULL); 468 soft_iface, NULL, NULL);
469 if (ret) 469 if (ret)
470 goto err_dev; 470 goto err_dev;
471 471
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
index 781abc34667a..8d1d4a22c50d 100644
--- a/net/bridge/br_if.c
+++ b/net/bridge/br_if.c
@@ -493,7 +493,7 @@ int br_add_if(struct net_bridge *br, struct net_device *dev)
493 493
494 dev->priv_flags |= IFF_BRIDGE_PORT; 494 dev->priv_flags |= IFF_BRIDGE_PORT;
495 495
496 err = netdev_master_upper_dev_link(dev, br->dev, NULL); 496 err = netdev_master_upper_dev_link(dev, br->dev, NULL, NULL);
497 if (err) 497 if (err)
498 goto err5; 498 goto err5;
499 499
diff --git a/net/core/dev.c b/net/core/dev.c
index 27d052bb78bc..8ed886663c6d 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5421,7 +5421,7 @@ static void __netdev_adjacent_dev_unlink_neighbour(struct net_device *dev,
5421 5421
5422static int __netdev_upper_dev_link(struct net_device *dev, 5422static int __netdev_upper_dev_link(struct net_device *dev,
5423 struct net_device *upper_dev, bool master, 5423 struct net_device *upper_dev, bool master,
5424 void *upper_priv) 5424 void *upper_priv, void *upper_info)
5425{ 5425{
5426 struct netdev_notifier_changeupper_info changeupper_info; 5426 struct netdev_notifier_changeupper_info changeupper_info;
5427 struct netdev_adjacent *i, *j, *to_i, *to_j; 5427 struct netdev_adjacent *i, *j, *to_i, *to_j;
@@ -5445,6 +5445,7 @@ static int __netdev_upper_dev_link(struct net_device *dev,
5445 changeupper_info.upper_dev = upper_dev; 5445 changeupper_info.upper_dev = upper_dev;
5446 changeupper_info.master = master; 5446 changeupper_info.master = master;
5447 changeupper_info.linking = true; 5447 changeupper_info.linking = true;
5448 changeupper_info.upper_info = upper_info;
5448 5449
5449 ret = call_netdevice_notifiers_info(NETDEV_PRECHANGEUPPER, dev, 5450 ret = call_netdevice_notifiers_info(NETDEV_PRECHANGEUPPER, dev,
5450 &changeupper_info.info); 5451 &changeupper_info.info);
@@ -5549,7 +5550,7 @@ rollback_mesh:
5549int netdev_upper_dev_link(struct net_device *dev, 5550int netdev_upper_dev_link(struct net_device *dev,
5550 struct net_device *upper_dev) 5551 struct net_device *upper_dev)
5551{ 5552{
5552 return __netdev_upper_dev_link(dev, upper_dev, false, NULL); 5553 return __netdev_upper_dev_link(dev, upper_dev, false, NULL, NULL);
5553} 5554}
5554EXPORT_SYMBOL(netdev_upper_dev_link); 5555EXPORT_SYMBOL(netdev_upper_dev_link);
5555 5556
@@ -5558,6 +5559,7 @@ EXPORT_SYMBOL(netdev_upper_dev_link);
5558 * @dev: device 5559 * @dev: device
5559 * @upper_dev: new upper device 5560 * @upper_dev: new upper device
5560 * @upper_priv: upper device private 5561 * @upper_priv: upper device private
5562 * @upper_info: upper info to be passed down via notifier
5561 * 5563 *
5562 * Adds a link to device which is upper to this one. In this case, only 5564 * Adds a link to device which is upper to this one. In this case, only
5563 * one master upper device can be linked, although other non-master devices 5565 * one master upper device can be linked, although other non-master devices
@@ -5567,9 +5569,10 @@ EXPORT_SYMBOL(netdev_upper_dev_link);
5567 */ 5569 */
5568int netdev_master_upper_dev_link(struct net_device *dev, 5570int netdev_master_upper_dev_link(struct net_device *dev,
5569 struct net_device *upper_dev, 5571 struct net_device *upper_dev,
5570 void *upper_priv) 5572 void *upper_priv, void *upper_info)
5571{ 5573{
5572 return __netdev_upper_dev_link(dev, upper_dev, true, upper_priv); 5574 return __netdev_upper_dev_link(dev, upper_dev, true,
5575 upper_priv, upper_info);
5573} 5576}
5574EXPORT_SYMBOL(netdev_master_upper_dev_link); 5577EXPORT_SYMBOL(netdev_master_upper_dev_link);
5575 5578
diff --git a/net/openvswitch/vport-netdev.c b/net/openvswitch/vport-netdev.c
index 3ee3df1edeae..8f4dd4c39bfe 100644
--- a/net/openvswitch/vport-netdev.c
+++ b/net/openvswitch/vport-netdev.c
@@ -105,7 +105,7 @@ struct vport *ovs_netdev_link(struct vport *vport, const char *name)
105 105
106 rtnl_lock(); 106 rtnl_lock();
107 err = netdev_master_upper_dev_link(vport->dev, 107 err = netdev_master_upper_dev_link(vport->dev,
108 get_dpdev(vport->dp), NULL); 108 get_dpdev(vport->dp), NULL, NULL);
109 if (err) 109 if (err)
110 goto error_unlock; 110 goto error_unlock;
111 111