summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/ulp/ipoib/ipoib_main.c6
-rw-r--r--drivers/net/hyperv/netvsc_drv.c2
-rw-r--r--drivers/net/ipvlan/ipvlan_main.c12
-rw-r--r--drivers/net/vrf.c4
-rw-r--r--include/linux/netdevice.h3
-rw-r--r--net/8021q/vlan.c4
-rw-r--r--net/core/dev.c4
-rw-r--r--net/core/dev_ioctl.c2
-rw-r--r--net/core/net-sysfs.c2
-rw-r--r--net/core/rtnetlink.c3
-rw-r--r--net/ipv4/devinet.c2
-rw-r--r--net/ipv4/ipconfig.c6
-rw-r--r--net/openvswitch/vport-geneve.c2
-rw-r--r--net/openvswitch/vport-gre.c2
-rw-r--r--net/openvswitch/vport-vxlan.c2
15 files changed, 33 insertions, 23 deletions
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 8710214594d8..6214d8c0d546 100644
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -167,7 +167,7 @@ int ipoib_open(struct net_device *dev)
167 if (flags & IFF_UP) 167 if (flags & IFF_UP)
168 continue; 168 continue;
169 169
170 dev_change_flags(cpriv->dev, flags | IFF_UP); 170 dev_change_flags(cpriv->dev, flags | IFF_UP, NULL);
171 } 171 }
172 up_read(&priv->vlan_rwsem); 172 up_read(&priv->vlan_rwsem);
173 } 173 }
@@ -207,7 +207,7 @@ static int ipoib_stop(struct net_device *dev)
207 if (!(flags & IFF_UP)) 207 if (!(flags & IFF_UP))
208 continue; 208 continue;
209 209
210 dev_change_flags(cpriv->dev, flags & ~IFF_UP); 210 dev_change_flags(cpriv->dev, flags & ~IFF_UP, NULL);
211 } 211 }
212 up_read(&priv->vlan_rwsem); 212 up_read(&priv->vlan_rwsem);
213 } 213 }
@@ -1823,7 +1823,7 @@ static void ipoib_parent_unregister_pre(struct net_device *ndev)
1823 * running ensures the it will not add more work. 1823 * running ensures the it will not add more work.
1824 */ 1824 */
1825 rtnl_lock(); 1825 rtnl_lock();
1826 dev_change_flags(priv->dev, priv->dev->flags & ~IFF_UP); 1826 dev_change_flags(priv->dev, priv->dev->flags & ~IFF_UP, NULL);
1827 rtnl_unlock(); 1827 rtnl_unlock();
1828 1828
1829 /* ipoib_event() cannot be running once this returns */ 1829 /* ipoib_event() cannot be running once this returns */
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index c65620adab52..18b5584d6377 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -1993,7 +1993,7 @@ static void __netvsc_vf_setup(struct net_device *ndev,
1993 "unable to change mtu to %u\n", ndev->mtu); 1993 "unable to change mtu to %u\n", ndev->mtu);
1994 1994
1995 /* set multicast etc flags on VF */ 1995 /* set multicast etc flags on VF */
1996 dev_change_flags(vf_netdev, ndev->flags | IFF_SLAVE); 1996 dev_change_flags(vf_netdev, ndev->flags | IFF_SLAVE, NULL);
1997 1997
1998 /* sync address list from ndev to VF */ 1998 /* sync address list from ndev to VF */
1999 netif_addr_lock_bh(ndev); 1999 netif_addr_lock_bh(ndev);
diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c
index 14f1cbd3b96f..c3d3e458f541 100644
--- a/drivers/net/ipvlan/ipvlan_main.c
+++ b/drivers/net/ipvlan/ipvlan_main.c
@@ -85,10 +85,12 @@ static int ipvlan_set_port_mode(struct ipvl_port *port, u16 nval,
85 flags = ipvlan->dev->flags; 85 flags = ipvlan->dev->flags;
86 if (nval == IPVLAN_MODE_L3 || nval == IPVLAN_MODE_L3S) { 86 if (nval == IPVLAN_MODE_L3 || nval == IPVLAN_MODE_L3S) {
87 err = dev_change_flags(ipvlan->dev, 87 err = dev_change_flags(ipvlan->dev,
88 flags | IFF_NOARP); 88 flags | IFF_NOARP,
89 extack);
89 } else { 90 } else {
90 err = dev_change_flags(ipvlan->dev, 91 err = dev_change_flags(ipvlan->dev,
91 flags & ~IFF_NOARP); 92 flags & ~IFF_NOARP,
93 extack);
92 } 94 }
93 if (unlikely(err)) 95 if (unlikely(err))
94 goto fail; 96 goto fail;
@@ -117,9 +119,11 @@ fail:
117 flags = ipvlan->dev->flags; 119 flags = ipvlan->dev->flags;
118 if (port->mode == IPVLAN_MODE_L3 || 120 if (port->mode == IPVLAN_MODE_L3 ||
119 port->mode == IPVLAN_MODE_L3S) 121 port->mode == IPVLAN_MODE_L3S)
120 dev_change_flags(ipvlan->dev, flags | IFF_NOARP); 122 dev_change_flags(ipvlan->dev, flags | IFF_NOARP,
123 NULL);
121 else 124 else
122 dev_change_flags(ipvlan->dev, flags & ~IFF_NOARP); 125 dev_change_flags(ipvlan->dev, flags & ~IFF_NOARP,
126 NULL);
123 } 127 }
124 128
125 return err; 129 return err;
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
index 1e9f2dc0de07..95909e262ba4 100644
--- a/drivers/net/vrf.c
+++ b/drivers/net/vrf.c
@@ -756,9 +756,9 @@ static void cycle_netdev(struct net_device *dev,
756 if (!netif_running(dev)) 756 if (!netif_running(dev))
757 return; 757 return;
758 758
759 ret = dev_change_flags(dev, flags & ~IFF_UP); 759 ret = dev_change_flags(dev, flags & ~IFF_UP, extack);
760 if (ret >= 0) 760 if (ret >= 0)
761 ret = dev_change_flags(dev, flags); 761 ret = dev_change_flags(dev, flags, extack);
762 762
763 if (ret < 0) { 763 if (ret < 0) {
764 netdev_err(dev, 764 netdev_err(dev,
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index d79be3055f5f..18cf464450ee 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -3612,7 +3612,8 @@ int dev_ifconf(struct net *net, struct ifconf *, int);
3612int dev_ethtool(struct net *net, struct ifreq *); 3612int dev_ethtool(struct net *net, struct ifreq *);
3613unsigned int dev_get_flags(const struct net_device *); 3613unsigned int dev_get_flags(const struct net_device *);
3614int __dev_change_flags(struct net_device *, unsigned int flags); 3614int __dev_change_flags(struct net_device *, unsigned int flags);
3615int dev_change_flags(struct net_device *, unsigned int); 3615int dev_change_flags(struct net_device *dev, unsigned int flags,
3616 struct netlink_ext_ack *extack);
3616void __dev_notify_flags(struct net_device *, unsigned int old_flags, 3617void __dev_notify_flags(struct net_device *, unsigned int old_flags,
3617 unsigned int gchanges); 3618 unsigned int gchanges);
3618int dev_change_name(struct net_device *, const char *); 3619int dev_change_name(struct net_device *, const char *);
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index aef1a977279c..dc4411165e43 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -358,6 +358,7 @@ static int __vlan_device_event(struct net_device *dev, unsigned long event)
358static int vlan_device_event(struct notifier_block *unused, unsigned long event, 358static int vlan_device_event(struct notifier_block *unused, unsigned long event,
359 void *ptr) 359 void *ptr)
360{ 360{
361 struct netlink_ext_ack *extack = netdev_notifier_info_to_extack(ptr);
361 struct net_device *dev = netdev_notifier_info_to_dev(ptr); 362 struct net_device *dev = netdev_notifier_info_to_dev(ptr);
362 struct vlan_group *grp; 363 struct vlan_group *grp;
363 struct vlan_info *vlan_info; 364 struct vlan_info *vlan_info;
@@ -460,7 +461,8 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event,
460 461
461 vlan = vlan_dev_priv(vlandev); 462 vlan = vlan_dev_priv(vlandev);
462 if (!(vlan->flags & VLAN_FLAG_LOOSE_BINDING)) 463 if (!(vlan->flags & VLAN_FLAG_LOOSE_BINDING))
463 dev_change_flags(vlandev, flgs | IFF_UP); 464 dev_change_flags(vlandev, flgs | IFF_UP,
465 extack);
464 netif_stacked_transfer_operstate(dev, vlandev); 466 netif_stacked_transfer_operstate(dev, vlandev);
465 } 467 }
466 break; 468 break;
diff --git a/net/core/dev.c b/net/core/dev.c
index b801c1aafd70..8bba6f98b545 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -7595,11 +7595,13 @@ void __dev_notify_flags(struct net_device *dev, unsigned int old_flags,
7595 * dev_change_flags - change device settings 7595 * dev_change_flags - change device settings
7596 * @dev: device 7596 * @dev: device
7597 * @flags: device state flags 7597 * @flags: device state flags
7598 * @extack: netlink extended ack
7598 * 7599 *
7599 * Change settings on device based state flags. The flags are 7600 * Change settings on device based state flags. The flags are
7600 * in the userspace exported format. 7601 * in the userspace exported format.
7601 */ 7602 */
7602int dev_change_flags(struct net_device *dev, unsigned int flags) 7603int dev_change_flags(struct net_device *dev, unsigned int flags,
7604 struct netlink_ext_ack *extack)
7603{ 7605{
7604 int ret; 7606 int ret;
7605 unsigned int changes, old_flags = dev->flags, old_gflags = dev->gflags; 7607 unsigned int changes, old_flags = dev->flags, old_gflags = dev->gflags;
diff --git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c
index 90e8aa36881e..da273ec3cc57 100644
--- a/net/core/dev_ioctl.c
+++ b/net/core/dev_ioctl.c
@@ -234,7 +234,7 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, unsigned int cmd)
234 234
235 switch (cmd) { 235 switch (cmd) {
236 case SIOCSIFFLAGS: /* Set interface flags */ 236 case SIOCSIFFLAGS: /* Set interface flags */
237 return dev_change_flags(dev, ifr->ifr_flags); 237 return dev_change_flags(dev, ifr->ifr_flags, NULL);
238 238
239 case SIOCSIFMETRIC: /* Set the metric on the interface 239 case SIOCSIFMETRIC: /* Set the metric on the interface
240 (currently unused) */ 240 (currently unused) */
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c
index bd67c4d0fcfd..ff9fd2bb4ce4 100644
--- a/net/core/net-sysfs.c
+++ b/net/core/net-sysfs.c
@@ -337,7 +337,7 @@ NETDEVICE_SHOW_RW(mtu, fmt_dec);
337 337
338static int change_flags(struct net_device *dev, unsigned long new_flags) 338static int change_flags(struct net_device *dev, unsigned long new_flags)
339{ 339{
340 return dev_change_flags(dev, (unsigned int)new_flags); 340 return dev_change_flags(dev, (unsigned int)new_flags, NULL);
341} 341}
342 342
343static ssize_t flags_store(struct device *dev, struct device_attribute *attr, 343static ssize_t flags_store(struct device *dev, struct device_attribute *attr,
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 98876cd1e36c..4c9e4e187600 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -2489,7 +2489,8 @@ static int do_setlink(const struct sk_buff *skb,
2489 } 2489 }
2490 2490
2491 if (ifm->ifi_flags || ifm->ifi_change) { 2491 if (ifm->ifi_flags || ifm->ifi_change) {
2492 err = dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm)); 2492 err = dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm),
2493 extack);
2493 if (err < 0) 2494 if (err < 0)
2494 goto errout; 2495 goto errout;
2495 } 2496 }
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index a34602ae27de..5b9b6d497f71 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -1100,7 +1100,7 @@ int devinet_ioctl(struct net *net, unsigned int cmd, struct ifreq *ifr)
1100 inet_del_ifa(in_dev, ifap, 1); 1100 inet_del_ifa(in_dev, ifap, 1);
1101 break; 1101 break;
1102 } 1102 }
1103 ret = dev_change_flags(dev, ifr->ifr_flags); 1103 ret = dev_change_flags(dev, ifr->ifr_flags, NULL);
1104 break; 1104 break;
1105 1105
1106 case SIOCSIFADDR: /* Set interface address (and family) */ 1106 case SIOCSIFADDR: /* Set interface address (and family) */
diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
index 88212615bf4c..55757764c381 100644
--- a/net/ipv4/ipconfig.c
+++ b/net/ipv4/ipconfig.c
@@ -220,7 +220,7 @@ static int __init ic_open_devs(void)
220 for_each_netdev(&init_net, dev) { 220 for_each_netdev(&init_net, dev) {
221 if (!(dev->flags & IFF_LOOPBACK) && !netdev_uses_dsa(dev)) 221 if (!(dev->flags & IFF_LOOPBACK) && !netdev_uses_dsa(dev))
222 continue; 222 continue;
223 if (dev_change_flags(dev, dev->flags | IFF_UP) < 0) 223 if (dev_change_flags(dev, dev->flags | IFF_UP, NULL) < 0)
224 pr_err("IP-Config: Failed to open %s\n", dev->name); 224 pr_err("IP-Config: Failed to open %s\n", dev->name);
225 } 225 }
226 226
@@ -238,7 +238,7 @@ static int __init ic_open_devs(void)
238 if (ic_proto_enabled && !able) 238 if (ic_proto_enabled && !able)
239 continue; 239 continue;
240 oflags = dev->flags; 240 oflags = dev->flags;
241 if (dev_change_flags(dev, oflags | IFF_UP) < 0) { 241 if (dev_change_flags(dev, oflags | IFF_UP, NULL) < 0) {
242 pr_err("IP-Config: Failed to open %s\n", 242 pr_err("IP-Config: Failed to open %s\n",
243 dev->name); 243 dev->name);
244 continue; 244 continue;
@@ -315,7 +315,7 @@ static void __init ic_close_devs(void)
315 dev = d->dev; 315 dev = d->dev;
316 if (d != ic_dev && !netdev_uses_dsa(dev)) { 316 if (d != ic_dev && !netdev_uses_dsa(dev)) {
317 pr_debug("IP-Config: Downing %s\n", dev->name); 317 pr_debug("IP-Config: Downing %s\n", dev->name);
318 dev_change_flags(dev, d->flags); 318 dev_change_flags(dev, d->flags, NULL);
319 } 319 }
320 kfree(d); 320 kfree(d);
321 } 321 }
diff --git a/net/openvswitch/vport-geneve.c b/net/openvswitch/vport-geneve.c
index 5aaf3babfc3f..acb6077b7478 100644
--- a/net/openvswitch/vport-geneve.c
+++ b/net/openvswitch/vport-geneve.c
@@ -93,7 +93,7 @@ static struct vport *geneve_tnl_create(const struct vport_parms *parms)
93 return ERR_CAST(dev); 93 return ERR_CAST(dev);
94 } 94 }
95 95
96 err = dev_change_flags(dev, dev->flags | IFF_UP); 96 err = dev_change_flags(dev, dev->flags | IFF_UP, NULL);
97 if (err < 0) { 97 if (err < 0) {
98 rtnl_delete_link(dev); 98 rtnl_delete_link(dev);
99 rtnl_unlock(); 99 rtnl_unlock();
diff --git a/net/openvswitch/vport-gre.c b/net/openvswitch/vport-gre.c
index 0e72d95b0e8f..c38a62464b85 100644
--- a/net/openvswitch/vport-gre.c
+++ b/net/openvswitch/vport-gre.c
@@ -68,7 +68,7 @@ static struct vport *gre_tnl_create(const struct vport_parms *parms)
68 return ERR_CAST(dev); 68 return ERR_CAST(dev);
69 } 69 }
70 70
71 err = dev_change_flags(dev, dev->flags | IFF_UP); 71 err = dev_change_flags(dev, dev->flags | IFF_UP, NULL);
72 if (err < 0) { 72 if (err < 0) {
73 rtnl_delete_link(dev); 73 rtnl_delete_link(dev);
74 rtnl_unlock(); 74 rtnl_unlock();
diff --git a/net/openvswitch/vport-vxlan.c b/net/openvswitch/vport-vxlan.c
index 7e6301b2ec4d..8f16f11f7ad3 100644
--- a/net/openvswitch/vport-vxlan.c
+++ b/net/openvswitch/vport-vxlan.c
@@ -131,7 +131,7 @@ static struct vport *vxlan_tnl_create(const struct vport_parms *parms)
131 return ERR_CAST(dev); 131 return ERR_CAST(dev);
132 } 132 }
133 133
134 err = dev_change_flags(dev, dev->flags | IFF_UP); 134 err = dev_change_flags(dev, dev->flags | IFF_UP, NULL);
135 if (err < 0) { 135 if (err < 0) {
136 rtnl_delete_link(dev); 136 rtnl_delete_link(dev);
137 rtnl_unlock(); 137 rtnl_unlock();