diff options
author | David Ahern <dsahern@gmail.com> | 2017-10-04 20:48:47 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-10-05 00:39:33 -0400 |
commit | 42ab19ee90292993370a30ad242599d75a3b749e (patch) | |
tree | a71275e4ba689a40d20d352a286fc2672228fec0 | |
parent | 33eaf2a6eb48ebf00374aaaf4b1b43f9950dcbe4 (diff) |
net: Add extack to upper device linking
Add extack arg to netdev_upper_dev_link and netdev_master_upper_dev_link
Signed-off-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/bonding/bond_main.c | 7 | ||||
-rw-r--r-- | drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c | 2 | ||||
-rw-r--r-- | drivers/net/hyperv/netvsc_drv.c | 2 | ||||
-rw-r--r-- | drivers/net/ipvlan/ipvlan_main.c | 2 | ||||
-rw-r--r-- | drivers/net/macsec.c | 2 | ||||
-rw-r--r-- | drivers/net/macvlan.c | 7 | ||||
-rw-r--r-- | drivers/net/macvtap.c | 2 | ||||
-rw-r--r-- | drivers/net/team/team.c | 2 | ||||
-rw-r--r-- | drivers/net/usb/qmi_wwan.c | 2 | ||||
-rw-r--r-- | drivers/net/vrf.c | 7 | ||||
-rw-r--r-- | include/linux/if_macvlan.h | 3 | ||||
-rw-r--r-- | include/linux/netdevice.h | 6 | ||||
-rw-r--r-- | net/8021q/vlan.c | 6 | ||||
-rw-r--r-- | net/8021q/vlan.h | 2 | ||||
-rw-r--r-- | net/8021q/vlan_netlink.c | 2 | ||||
-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 | 15 | ||||
-rw-r--r-- | net/openvswitch/vport-netdev.c | 3 |
19 files changed, 44 insertions, 32 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 78feb94a36db..bc92307c2082 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -1217,14 +1217,15 @@ static enum netdev_lag_tx_type bond_lag_tx_type(struct bonding *bond) | |||
1217 | } | 1217 | } |
1218 | } | 1218 | } |
1219 | 1219 | ||
1220 | static int bond_master_upper_dev_link(struct bonding *bond, struct slave *slave) | 1220 | static int bond_master_upper_dev_link(struct bonding *bond, struct slave *slave, |
1221 | struct netlink_ext_ack *extack) | ||
1221 | { | 1222 | { |
1222 | struct netdev_lag_upper_info lag_upper_info; | 1223 | struct netdev_lag_upper_info lag_upper_info; |
1223 | int err; | 1224 | int err; |
1224 | 1225 | ||
1225 | lag_upper_info.tx_type = bond_lag_tx_type(bond); | 1226 | lag_upper_info.tx_type = bond_lag_tx_type(bond); |
1226 | err = netdev_master_upper_dev_link(slave->dev, bond->dev, slave, | 1227 | err = netdev_master_upper_dev_link(slave->dev, bond->dev, slave, |
1227 | &lag_upper_info); | 1228 | &lag_upper_info, extack); |
1228 | if (err) | 1229 | if (err) |
1229 | return err; | 1230 | return err; |
1230 | rtmsg_ifinfo(RTM_NEWLINK, slave->dev, IFF_SLAVE, GFP_KERNEL); | 1231 | rtmsg_ifinfo(RTM_NEWLINK, slave->dev, IFF_SLAVE, GFP_KERNEL); |
@@ -1710,7 +1711,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev, | |||
1710 | goto err_detach; | 1711 | goto err_detach; |
1711 | } | 1712 | } |
1712 | 1713 | ||
1713 | res = bond_master_upper_dev_link(bond, new_slave); | 1714 | res = bond_master_upper_dev_link(bond, new_slave, extack); |
1714 | if (res) { | 1715 | if (res) { |
1715 | netdev_dbg(bond_dev, "Error %d calling bond_master_upper_dev_link\n", res); | 1716 | netdev_dbg(bond_dev, "Error %d calling bond_master_upper_dev_link\n", res); |
1716 | goto err_unregister; | 1717 | goto err_unregister; |
diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c index 98f22551eb45..1af326a60cbb 100644 --- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c +++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c | |||
@@ -178,7 +178,7 @@ static int rmnet_newlink(struct net *src_net, struct net_device *dev, | |||
178 | if (err) | 178 | if (err) |
179 | goto err1; | 179 | goto err1; |
180 | 180 | ||
181 | err = netdev_master_upper_dev_link(dev, real_dev, NULL, NULL); | 181 | err = netdev_master_upper_dev_link(dev, real_dev, NULL, NULL, extack); |
182 | if (err) | 182 | if (err) |
183 | goto err2; | 183 | goto err2; |
184 | 184 | ||
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c index f300ae61c6c6..dfb986421ec6 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c | |||
@@ -1748,7 +1748,7 @@ static int netvsc_vf_join(struct net_device *vf_netdev, | |||
1748 | goto rx_handler_failed; | 1748 | goto rx_handler_failed; |
1749 | } | 1749 | } |
1750 | 1750 | ||
1751 | ret = netdev_upper_dev_link(vf_netdev, ndev); | 1751 | ret = netdev_upper_dev_link(vf_netdev, ndev, NULL); |
1752 | if (ret != 0) { | 1752 | if (ret != 0) { |
1753 | netdev_err(vf_netdev, | 1753 | netdev_err(vf_netdev, |
1754 | "can not set master device %s (err = %d)\n", | 1754 | "can not set master device %s (err = %d)\n", |
diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c index c74893c1e620..57c3856bab05 100644 --- a/drivers/net/ipvlan/ipvlan_main.c +++ b/drivers/net/ipvlan/ipvlan_main.c | |||
@@ -584,7 +584,7 @@ int ipvlan_link_new(struct net *src_net, struct net_device *dev, | |||
584 | if (err < 0) | 584 | if (err < 0) |
585 | goto remove_ida; | 585 | goto remove_ida; |
586 | 586 | ||
587 | err = netdev_upper_dev_link(phy_dev, dev); | 587 | err = netdev_upper_dev_link(phy_dev, dev, extack); |
588 | if (err) { | 588 | if (err) { |
589 | goto unregister_netdev; | 589 | goto unregister_netdev; |
590 | } | 590 | } |
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index 98e4deaa3a6a..ccbe4eaffe4d 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c | |||
@@ -3244,7 +3244,7 @@ static int macsec_newlink(struct net *net, struct net_device *dev, | |||
3244 | &macsec_netdev_addr_lock_key, | 3244 | &macsec_netdev_addr_lock_key, |
3245 | macsec_get_nest_level(dev)); | 3245 | macsec_get_nest_level(dev)); |
3246 | 3246 | ||
3247 | err = netdev_upper_dev_link(real_dev, dev); | 3247 | err = netdev_upper_dev_link(real_dev, dev, extack); |
3248 | if (err < 0) | 3248 | if (err < 0) |
3249 | goto unregister; | 3249 | goto unregister; |
3250 | 3250 | ||
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 1ffe77e95d46..858bd66511a2 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c | |||
@@ -1344,7 +1344,8 @@ static int macvlan_changelink_sources(struct macvlan_dev *vlan, u32 mode, | |||
1344 | } | 1344 | } |
1345 | 1345 | ||
1346 | int macvlan_common_newlink(struct net *src_net, struct net_device *dev, | 1346 | int macvlan_common_newlink(struct net *src_net, struct net_device *dev, |
1347 | struct nlattr *tb[], struct nlattr *data[]) | 1347 | struct nlattr *tb[], struct nlattr *data[], |
1348 | struct netlink_ext_ack *extack) | ||
1348 | { | 1349 | { |
1349 | struct macvlan_dev *vlan = netdev_priv(dev); | 1350 | struct macvlan_dev *vlan = netdev_priv(dev); |
1350 | struct macvlan_port *port; | 1351 | struct macvlan_port *port; |
@@ -1433,7 +1434,7 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev, | |||
1433 | goto destroy_macvlan_port; | 1434 | goto destroy_macvlan_port; |
1434 | 1435 | ||
1435 | dev->priv_flags |= IFF_MACVLAN; | 1436 | dev->priv_flags |= IFF_MACVLAN; |
1436 | err = netdev_upper_dev_link(lowerdev, dev); | 1437 | err = netdev_upper_dev_link(lowerdev, dev, extack); |
1437 | if (err) | 1438 | if (err) |
1438 | goto unregister_netdev; | 1439 | goto unregister_netdev; |
1439 | 1440 | ||
@@ -1456,7 +1457,7 @@ static int macvlan_newlink(struct net *src_net, struct net_device *dev, | |||
1456 | struct nlattr *tb[], struct nlattr *data[], | 1457 | struct nlattr *tb[], struct nlattr *data[], |
1457 | struct netlink_ext_ack *extack) | 1458 | struct netlink_ext_ack *extack) |
1458 | { | 1459 | { |
1459 | return macvlan_common_newlink(src_net, dev, tb, data); | 1460 | return macvlan_common_newlink(src_net, dev, tb, data, extack); |
1460 | } | 1461 | } |
1461 | 1462 | ||
1462 | void macvlan_dellink(struct net_device *dev, struct list_head *head) | 1463 | void macvlan_dellink(struct net_device *dev, struct list_head *head) |
diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c index c2d0ea2fb019..f62aea2fcfa9 100644 --- a/drivers/net/macvtap.c +++ b/drivers/net/macvtap.c | |||
@@ -105,7 +105,7 @@ static int macvtap_newlink(struct net *src_net, struct net_device *dev, | |||
105 | /* Don't put anything that may fail after macvlan_common_newlink | 105 | /* Don't put anything that may fail after macvlan_common_newlink |
106 | * because we can't undo what it does. | 106 | * because we can't undo what it does. |
107 | */ | 107 | */ |
108 | err = macvlan_common_newlink(src_net, dev, tb, data); | 108 | err = macvlan_common_newlink(src_net, dev, tb, data, extack); |
109 | if (err) { | 109 | if (err) { |
110 | netdev_rx_handler_unregister(dev); | 110 | netdev_rx_handler_unregister(dev); |
111 | return err; | 111 | return err; |
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index 4359d45aa131..a468439969df 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c | |||
@@ -1112,7 +1112,7 @@ static int team_upper_dev_link(struct team *team, struct team_port *port) | |||
1112 | 1112 | ||
1113 | lag_upper_info.tx_type = team->mode->lag_tx_type; | 1113 | lag_upper_info.tx_type = team->mode->lag_tx_type; |
1114 | err = netdev_master_upper_dev_link(port->dev, team->dev, NULL, | 1114 | err = netdev_master_upper_dev_link(port->dev, team->dev, NULL, |
1115 | &lag_upper_info); | 1115 | &lag_upper_info, NULL); |
1116 | if (err) | 1116 | if (err) |
1117 | return err; | 1117 | return err; |
1118 | port->dev->priv_flags |= IFF_TEAM_PORT; | 1118 | port->dev->priv_flags |= IFF_TEAM_PORT; |
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c index 8c3733608271..db7279d5b250 100644 --- a/drivers/net/usb/qmi_wwan.c +++ b/drivers/net/usb/qmi_wwan.c | |||
@@ -221,7 +221,7 @@ static int qmimux_register_device(struct net_device *real_dev, u8 mux_id) | |||
221 | /* Account for reference in struct qmimux_priv_priv */ | 221 | /* Account for reference in struct qmimux_priv_priv */ |
222 | dev_hold(real_dev); | 222 | dev_hold(real_dev); |
223 | 223 | ||
224 | err = netdev_upper_dev_link(real_dev, new_dev); | 224 | err = netdev_upper_dev_link(real_dev, new_dev, NULL); |
225 | if (err) | 225 | if (err) |
226 | goto out_unregister_netdev; | 226 | goto out_unregister_netdev; |
227 | 227 | ||
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c index 4a082ef53533..77d0655a0250 100644 --- a/drivers/net/vrf.c +++ b/drivers/net/vrf.c | |||
@@ -764,7 +764,8 @@ static void cycle_netdev(struct net_device *dev) | |||
764 | } | 764 | } |
765 | } | 765 | } |
766 | 766 | ||
767 | static int do_vrf_add_slave(struct net_device *dev, struct net_device *port_dev) | 767 | static int do_vrf_add_slave(struct net_device *dev, struct net_device *port_dev, |
768 | struct netlink_ext_ack *extack) | ||
768 | { | 769 | { |
769 | int ret; | 770 | int ret; |
770 | 771 | ||
@@ -775,7 +776,7 @@ static int do_vrf_add_slave(struct net_device *dev, struct net_device *port_dev) | |||
775 | return -EOPNOTSUPP; | 776 | return -EOPNOTSUPP; |
776 | 777 | ||
777 | port_dev->priv_flags |= IFF_L3MDEV_SLAVE; | 778 | port_dev->priv_flags |= IFF_L3MDEV_SLAVE; |
778 | ret = netdev_master_upper_dev_link(port_dev, dev, NULL, NULL); | 779 | ret = netdev_master_upper_dev_link(port_dev, dev, NULL, NULL, extack); |
779 | if (ret < 0) | 780 | if (ret < 0) |
780 | goto err; | 781 | goto err; |
781 | 782 | ||
@@ -794,7 +795,7 @@ static int vrf_add_slave(struct net_device *dev, struct net_device *port_dev, | |||
794 | if (netif_is_l3_master(port_dev) || netif_is_l3_slave(port_dev)) | 795 | if (netif_is_l3_master(port_dev) || netif_is_l3_slave(port_dev)) |
795 | return -EINVAL; | 796 | return -EINVAL; |
796 | 797 | ||
797 | return do_vrf_add_slave(dev, port_dev); | 798 | return do_vrf_add_slave(dev, port_dev, extack); |
798 | } | 799 | } |
799 | 800 | ||
800 | /* inverse of do_vrf_add_slave */ | 801 | /* inverse of do_vrf_add_slave */ |
diff --git a/include/linux/if_macvlan.h b/include/linux/if_macvlan.h index c9ec1343d187..10e319f41fb1 100644 --- a/include/linux/if_macvlan.h +++ b/include/linux/if_macvlan.h | |||
@@ -72,7 +72,8 @@ static inline void macvlan_count_rx(const struct macvlan_dev *vlan, | |||
72 | extern void macvlan_common_setup(struct net_device *dev); | 72 | extern void macvlan_common_setup(struct net_device *dev); |
73 | 73 | ||
74 | extern int macvlan_common_newlink(struct net *src_net, struct net_device *dev, | 74 | extern int macvlan_common_newlink(struct net *src_net, struct net_device *dev, |
75 | struct nlattr *tb[], struct nlattr *data[]); | 75 | struct nlattr *tb[], struct nlattr *data[], |
76 | struct netlink_ext_ack *extack); | ||
76 | 77 | ||
77 | extern void macvlan_count_rx(const struct macvlan_dev *vlan, | 78 | extern void macvlan_count_rx(const struct macvlan_dev *vlan, |
78 | unsigned int len, bool success, | 79 | unsigned int len, bool success, |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 368a5064a487..31bb3010c69b 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -3919,10 +3919,12 @@ void *netdev_adjacent_get_private(struct list_head *adj_list); | |||
3919 | void *netdev_lower_get_first_private_rcu(struct net_device *dev); | 3919 | void *netdev_lower_get_first_private_rcu(struct net_device *dev); |
3920 | struct net_device *netdev_master_upper_dev_get(struct net_device *dev); | 3920 | struct net_device *netdev_master_upper_dev_get(struct net_device *dev); |
3921 | struct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev); | 3921 | struct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev); |
3922 | int netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev); | 3922 | int netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev, |
3923 | struct netlink_ext_ack *extack); | ||
3923 | int netdev_master_upper_dev_link(struct net_device *dev, | 3924 | int netdev_master_upper_dev_link(struct net_device *dev, |
3924 | struct net_device *upper_dev, | 3925 | struct net_device *upper_dev, |
3925 | void *upper_priv, void *upper_info); | 3926 | void *upper_priv, void *upper_info, |
3927 | struct netlink_ext_ack *extack); | ||
3926 | void netdev_upper_dev_unlink(struct net_device *dev, | 3928 | void netdev_upper_dev_unlink(struct net_device *dev, |
3927 | struct net_device *upper_dev); | 3929 | struct net_device *upper_dev); |
3928 | void netdev_adjacent_rename_links(struct net_device *dev, char *oldname); | 3930 | void netdev_adjacent_rename_links(struct net_device *dev, char *oldname); |
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 9649579b5b9f..71c3e045505b 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c | |||
@@ -138,7 +138,7 @@ int vlan_check_real_dev(struct net_device *real_dev, | |||
138 | return 0; | 138 | return 0; |
139 | } | 139 | } |
140 | 140 | ||
141 | int register_vlan_dev(struct net_device *dev) | 141 | int register_vlan_dev(struct net_device *dev, struct netlink_ext_ack *extack) |
142 | { | 142 | { |
143 | struct vlan_dev_priv *vlan = vlan_dev_priv(dev); | 143 | struct vlan_dev_priv *vlan = vlan_dev_priv(dev); |
144 | struct net_device *real_dev = vlan->real_dev; | 144 | struct net_device *real_dev = vlan->real_dev; |
@@ -174,7 +174,7 @@ int register_vlan_dev(struct net_device *dev) | |||
174 | if (err < 0) | 174 | if (err < 0) |
175 | goto out_uninit_mvrp; | 175 | goto out_uninit_mvrp; |
176 | 176 | ||
177 | err = netdev_upper_dev_link(real_dev, dev); | 177 | err = netdev_upper_dev_link(real_dev, dev, extack); |
178 | if (err) | 178 | if (err) |
179 | goto out_unregister_netdev; | 179 | goto out_unregister_netdev; |
180 | 180 | ||
@@ -270,7 +270,7 @@ static int register_vlan_device(struct net_device *real_dev, u16 vlan_id) | |||
270 | vlan->flags = VLAN_FLAG_REORDER_HDR; | 270 | vlan->flags = VLAN_FLAG_REORDER_HDR; |
271 | 271 | ||
272 | new_dev->rtnl_link_ops = &vlan_link_ops; | 272 | new_dev->rtnl_link_ops = &vlan_link_ops; |
273 | err = register_vlan_dev(new_dev); | 273 | err = register_vlan_dev(new_dev, NULL); |
274 | if (err < 0) | 274 | if (err < 0) |
275 | goto out_free_newdev; | 275 | goto out_free_newdev; |
276 | 276 | ||
diff --git a/net/8021q/vlan.h b/net/8021q/vlan.h index df8bd65dd370..94f8eed9f9b3 100644 --- a/net/8021q/vlan.h +++ b/net/8021q/vlan.h | |||
@@ -107,7 +107,7 @@ void vlan_dev_get_realdev_name(const struct net_device *dev, char *result); | |||
107 | int vlan_check_real_dev(struct net_device *real_dev, | 107 | int vlan_check_real_dev(struct net_device *real_dev, |
108 | __be16 protocol, u16 vlan_id); | 108 | __be16 protocol, u16 vlan_id); |
109 | void vlan_setup(struct net_device *dev); | 109 | void vlan_setup(struct net_device *dev); |
110 | int register_vlan_dev(struct net_device *dev); | 110 | int register_vlan_dev(struct net_device *dev, struct netlink_ext_ack *extack); |
111 | void unregister_vlan_dev(struct net_device *dev, struct list_head *head); | 111 | void unregister_vlan_dev(struct net_device *dev, struct list_head *head); |
112 | bool vlan_dev_inherit_address(struct net_device *dev, | 112 | bool vlan_dev_inherit_address(struct net_device *dev, |
113 | struct net_device *real_dev); | 113 | struct net_device *real_dev); |
diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c index 5e831de3103e..6e7c5a6a7930 100644 --- a/net/8021q/vlan_netlink.c +++ b/net/8021q/vlan_netlink.c | |||
@@ -160,7 +160,7 @@ static int vlan_newlink(struct net *src_net, struct net_device *dev, | |||
160 | if (err < 0) | 160 | if (err < 0) |
161 | return err; | 161 | return err; |
162 | 162 | ||
163 | return register_vlan_dev(dev); | 163 | return register_vlan_dev(dev, extack); |
164 | } | 164 | } |
165 | 165 | ||
166 | static inline size_t vlan_qos_map_size(unsigned int n) | 166 | static inline size_t vlan_qos_map_size(unsigned int n) |
diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c index e348f76ea8c1..f7b413b9297e 100644 --- a/net/batman-adv/hard-interface.c +++ b/net/batman-adv/hard-interface.c | |||
@@ -738,7 +738,7 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface, | |||
738 | bat_priv = netdev_priv(hard_iface->soft_iface); | 738 | bat_priv = netdev_priv(hard_iface->soft_iface); |
739 | 739 | ||
740 | ret = netdev_master_upper_dev_link(hard_iface->net_dev, | 740 | ret = netdev_master_upper_dev_link(hard_iface->net_dev, |
741 | soft_iface, NULL, NULL); | 741 | soft_iface, NULL, NULL, NULL); |
742 | if (ret) | 742 | if (ret) |
743 | goto err_dev; | 743 | goto err_dev; |
744 | 744 | ||
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index f3aef22931ab..0a3fd727048d 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c | |||
@@ -540,7 +540,7 @@ int br_add_if(struct net_bridge *br, struct net_device *dev) | |||
540 | 540 | ||
541 | dev->priv_flags |= IFF_BRIDGE_PORT; | 541 | dev->priv_flags |= IFF_BRIDGE_PORT; |
542 | 542 | ||
543 | err = netdev_master_upper_dev_link(dev, br->dev, NULL, NULL); | 543 | err = netdev_master_upper_dev_link(dev, br->dev, NULL, NULL, NULL); |
544 | if (err) | 544 | if (err) |
545 | goto err5; | 545 | goto err5; |
546 | 546 | ||
diff --git a/net/core/dev.c b/net/core/dev.c index e27a6bc0ac4d..fcddccb6be41 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -6277,11 +6277,13 @@ static void __netdev_adjacent_dev_unlink_neighbour(struct net_device *dev, | |||
6277 | 6277 | ||
6278 | static int __netdev_upper_dev_link(struct net_device *dev, | 6278 | static int __netdev_upper_dev_link(struct net_device *dev, |
6279 | struct net_device *upper_dev, bool master, | 6279 | struct net_device *upper_dev, bool master, |
6280 | void *upper_priv, void *upper_info) | 6280 | void *upper_priv, void *upper_info, |
6281 | struct netlink_ext_ack *extack) | ||
6281 | { | 6282 | { |
6282 | struct netdev_notifier_changeupper_info changeupper_info = { | 6283 | struct netdev_notifier_changeupper_info changeupper_info = { |
6283 | .info = { | 6284 | .info = { |
6284 | .dev = dev, | 6285 | .dev = dev, |
6286 | .extack = extack, | ||
6285 | }, | 6287 | }, |
6286 | .upper_dev = upper_dev, | 6288 | .upper_dev = upper_dev, |
6287 | .master = master, | 6289 | .master = master, |
@@ -6341,9 +6343,11 @@ rollback: | |||
6341 | * returns zero. | 6343 | * returns zero. |
6342 | */ | 6344 | */ |
6343 | int netdev_upper_dev_link(struct net_device *dev, | 6345 | int netdev_upper_dev_link(struct net_device *dev, |
6344 | struct net_device *upper_dev) | 6346 | struct net_device *upper_dev, |
6347 | struct netlink_ext_ack *extack) | ||
6345 | { | 6348 | { |
6346 | return __netdev_upper_dev_link(dev, upper_dev, false, NULL, NULL); | 6349 | return __netdev_upper_dev_link(dev, upper_dev, false, |
6350 | NULL, NULL, extack); | ||
6347 | } | 6351 | } |
6348 | EXPORT_SYMBOL(netdev_upper_dev_link); | 6352 | EXPORT_SYMBOL(netdev_upper_dev_link); |
6349 | 6353 | ||
@@ -6362,10 +6366,11 @@ EXPORT_SYMBOL(netdev_upper_dev_link); | |||
6362 | */ | 6366 | */ |
6363 | int netdev_master_upper_dev_link(struct net_device *dev, | 6367 | int netdev_master_upper_dev_link(struct net_device *dev, |
6364 | struct net_device *upper_dev, | 6368 | struct net_device *upper_dev, |
6365 | void *upper_priv, void *upper_info) | 6369 | void *upper_priv, void *upper_info, |
6370 | struct netlink_ext_ack *extack) | ||
6366 | { | 6371 | { |
6367 | return __netdev_upper_dev_link(dev, upper_dev, true, | 6372 | return __netdev_upper_dev_link(dev, upper_dev, true, |
6368 | upper_priv, upper_info); | 6373 | upper_priv, upper_info, extack); |
6369 | } | 6374 | } |
6370 | EXPORT_SYMBOL(netdev_master_upper_dev_link); | 6375 | EXPORT_SYMBOL(netdev_master_upper_dev_link); |
6371 | 6376 | ||
diff --git a/net/openvswitch/vport-netdev.c b/net/openvswitch/vport-netdev.c index 0389398fa4ab..2e5e7a41d8ef 100644 --- a/net/openvswitch/vport-netdev.c +++ b/net/openvswitch/vport-netdev.c | |||
@@ -108,7 +108,8 @@ struct vport *ovs_netdev_link(struct vport *vport, const char *name) | |||
108 | 108 | ||
109 | rtnl_lock(); | 109 | rtnl_lock(); |
110 | err = netdev_master_upper_dev_link(vport->dev, | 110 | err = netdev_master_upper_dev_link(vport->dev, |
111 | get_dpdev(vport->dp), NULL, NULL); | 111 | get_dpdev(vport->dp), |
112 | NULL, NULL, NULL); | ||
112 | if (err) | 113 | if (err) |
113 | goto error_unlock; | 114 | goto error_unlock; |
114 | 115 | ||