diff options
-rw-r--r-- | drivers/net/bonding/bond_main.c | 2 | ||||
-rw-r--r-- | drivers/net/team/team.c | 2 | ||||
-rw-r--r-- | drivers/net/vrf.c | 2 | ||||
-rw-r--r-- | include/linux/netdevice.h | 3 | ||||
-rw-r--r-- | net/batman-adv/hard-interface.c | 2 | ||||
-rw-r--r-- | net/bridge/br_if.c | 2 | ||||
-rw-r--r-- | net/core/dev.c | 11 | ||||
-rw-r--r-- | net/openvswitch/vport-netdev.c | 2 |
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 | ||
2168 | static inline void netdev_notifier_info_init(struct netdev_notifier_info *info, | 2169 | static 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); | |||
3620 | int netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev); | 3621 | int netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev); |
3621 | int netdev_master_upper_dev_link(struct net_device *dev, | 3622 | int 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); |
3624 | void netdev_upper_dev_unlink(struct net_device *dev, | 3625 | void netdev_upper_dev_unlink(struct net_device *dev, |
3625 | struct net_device *upper_dev); | 3626 | struct net_device *upper_dev); |
3626 | void netdev_adjacent_rename_links(struct net_device *dev, char *oldname); | 3627 | void 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 | ||
5422 | static int __netdev_upper_dev_link(struct net_device *dev, | 5422 | static 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: | |||
5549 | int netdev_upper_dev_link(struct net_device *dev, | 5550 | int 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 | } |
5554 | EXPORT_SYMBOL(netdev_upper_dev_link); | 5555 | EXPORT_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 | */ |
5568 | int netdev_master_upper_dev_link(struct net_device *dev, | 5570 | int 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 | } |
5574 | EXPORT_SYMBOL(netdev_master_upper_dev_link); | 5577 | EXPORT_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 | ||