summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Ahern <dsahern@gmail.com>2017-10-04 20:48:47 -0400
committerDavid S. Miller <davem@davemloft.net>2017-10-05 00:39:33 -0400
commit42ab19ee90292993370a30ad242599d75a3b749e (patch)
treea71275e4ba689a40d20d352a286fc2672228fec0
parent33eaf2a6eb48ebf00374aaaf4b1b43f9950dcbe4 (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.c7
-rw-r--r--drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c2
-rw-r--r--drivers/net/hyperv/netvsc_drv.c2
-rw-r--r--drivers/net/ipvlan/ipvlan_main.c2
-rw-r--r--drivers/net/macsec.c2
-rw-r--r--drivers/net/macvlan.c7
-rw-r--r--drivers/net/macvtap.c2
-rw-r--r--drivers/net/team/team.c2
-rw-r--r--drivers/net/usb/qmi_wwan.c2
-rw-r--r--drivers/net/vrf.c7
-rw-r--r--include/linux/if_macvlan.h3
-rw-r--r--include/linux/netdevice.h6
-rw-r--r--net/8021q/vlan.c6
-rw-r--r--net/8021q/vlan.h2
-rw-r--r--net/8021q/vlan_netlink.c2
-rw-r--r--net/batman-adv/hard-interface.c2
-rw-r--r--net/bridge/br_if.c2
-rw-r--r--net/core/dev.c15
-rw-r--r--net/openvswitch/vport-netdev.c3
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
1220static int bond_master_upper_dev_link(struct bonding *bond, struct slave *slave) 1220static 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
1346int macvlan_common_newlink(struct net *src_net, struct net_device *dev, 1346int 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
1462void macvlan_dellink(struct net_device *dev, struct list_head *head) 1463void 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
767static int do_vrf_add_slave(struct net_device *dev, struct net_device *port_dev) 767static 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,
72extern void macvlan_common_setup(struct net_device *dev); 72extern void macvlan_common_setup(struct net_device *dev);
73 73
74extern int macvlan_common_newlink(struct net *src_net, struct net_device *dev, 74extern 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
77extern void macvlan_count_rx(const struct macvlan_dev *vlan, 78extern 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);
3919void *netdev_lower_get_first_private_rcu(struct net_device *dev); 3919void *netdev_lower_get_first_private_rcu(struct net_device *dev);
3920struct net_device *netdev_master_upper_dev_get(struct net_device *dev); 3920struct net_device *netdev_master_upper_dev_get(struct net_device *dev);
3921struct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev); 3921struct net_device *netdev_master_upper_dev_get_rcu(struct net_device *dev);
3922int netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev); 3922int netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev,
3923 struct netlink_ext_ack *extack);
3923int netdev_master_upper_dev_link(struct net_device *dev, 3924int 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);
3926void netdev_upper_dev_unlink(struct net_device *dev, 3928void netdev_upper_dev_unlink(struct net_device *dev,
3927 struct net_device *upper_dev); 3929 struct net_device *upper_dev);
3928void netdev_adjacent_rename_links(struct net_device *dev, char *oldname); 3930void 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
141int register_vlan_dev(struct net_device *dev) 141int 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);
107int vlan_check_real_dev(struct net_device *real_dev, 107int vlan_check_real_dev(struct net_device *real_dev,
108 __be16 protocol, u16 vlan_id); 108 __be16 protocol, u16 vlan_id);
109void vlan_setup(struct net_device *dev); 109void vlan_setup(struct net_device *dev);
110int register_vlan_dev(struct net_device *dev); 110int register_vlan_dev(struct net_device *dev, struct netlink_ext_ack *extack);
111void unregister_vlan_dev(struct net_device *dev, struct list_head *head); 111void unregister_vlan_dev(struct net_device *dev, struct list_head *head);
112bool vlan_dev_inherit_address(struct net_device *dev, 112bool 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
166static inline size_t vlan_qos_map_size(unsigned int n) 166static 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
6278static int __netdev_upper_dev_link(struct net_device *dev, 6278static 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 */
6343int netdev_upper_dev_link(struct net_device *dev, 6345int 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}
6348EXPORT_SYMBOL(netdev_upper_dev_link); 6352EXPORT_SYMBOL(netdev_upper_dev_link);
6349 6353
@@ -6362,10 +6366,11 @@ EXPORT_SYMBOL(netdev_upper_dev_link);
6362 */ 6366 */
6363int netdev_master_upper_dev_link(struct net_device *dev, 6367int 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}
6370EXPORT_SYMBOL(netdev_master_upper_dev_link); 6375EXPORT_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