if (flags & IFF_UP)
                                continue;
 
-                       dev_change_flags(cpriv->dev, flags | IFF_UP);
+                       dev_change_flags(cpriv->dev, flags | IFF_UP, NULL);
                }
                up_read(&priv->vlan_rwsem);
        }
                        if (!(flags & IFF_UP))
                                continue;
 
-                       dev_change_flags(cpriv->dev, flags & ~IFF_UP);
+                       dev_change_flags(cpriv->dev, flags & ~IFF_UP, NULL);
                }
                up_read(&priv->vlan_rwsem);
        }
         * running ensures the it will not add more work.
         */
        rtnl_lock();
-       dev_change_flags(priv->dev, priv->dev->flags & ~IFF_UP);
+       dev_change_flags(priv->dev, priv->dev->flags & ~IFF_UP, NULL);
        rtnl_unlock();
 
        /* ipoib_event() cannot be running once this returns */
 
                            "unable to change mtu to %u\n", ndev->mtu);
 
        /* set multicast etc flags on VF */
-       dev_change_flags(vf_netdev, ndev->flags | IFF_SLAVE);
+       dev_change_flags(vf_netdev, ndev->flags | IFF_SLAVE, NULL);
 
        /* sync address list from ndev to VF */
        netif_addr_lock_bh(ndev);
 
                        flags = ipvlan->dev->flags;
                        if (nval == IPVLAN_MODE_L3 || nval == IPVLAN_MODE_L3S) {
                                err = dev_change_flags(ipvlan->dev,
-                                                      flags | IFF_NOARP);
+                                                      flags | IFF_NOARP,
+                                                      extack);
                        } else {
                                err = dev_change_flags(ipvlan->dev,
-                                                      flags & ~IFF_NOARP);
+                                                      flags & ~IFF_NOARP,
+                                                      extack);
                        }
                        if (unlikely(err))
                                goto fail;
                flags = ipvlan->dev->flags;
                if (port->mode == IPVLAN_MODE_L3 ||
                    port->mode == IPVLAN_MODE_L3S)
-                       dev_change_flags(ipvlan->dev, flags | IFF_NOARP);
+                       dev_change_flags(ipvlan->dev, flags | IFF_NOARP,
+                                        NULL);
                else
-                       dev_change_flags(ipvlan->dev, flags & ~IFF_NOARP);
+                       dev_change_flags(ipvlan->dev, flags & ~IFF_NOARP,
+                                        NULL);
        }
 
        return err;
 
        if (!netif_running(dev))
                return;
 
-       ret = dev_change_flags(dev, flags & ~IFF_UP);
+       ret = dev_change_flags(dev, flags & ~IFF_UP, extack);
        if (ret >= 0)
-               ret = dev_change_flags(dev, flags);
+               ret = dev_change_flags(dev, flags, extack);
 
        if (ret < 0) {
                netdev_err(dev,
 
 int dev_ethtool(struct net *net, struct ifreq *);
 unsigned int dev_get_flags(const struct net_device *);
 int __dev_change_flags(struct net_device *, unsigned int flags);
-int dev_change_flags(struct net_device *, unsigned int);
+int dev_change_flags(struct net_device *dev, unsigned int flags,
+                    struct netlink_ext_ack *extack);
 void __dev_notify_flags(struct net_device *, unsigned int old_flags,
                        unsigned int gchanges);
 int dev_change_name(struct net_device *, const char *);
 
 static int vlan_device_event(struct notifier_block *unused, unsigned long event,
                             void *ptr)
 {
+       struct netlink_ext_ack *extack = netdev_notifier_info_to_extack(ptr);
        struct net_device *dev = netdev_notifier_info_to_dev(ptr);
        struct vlan_group *grp;
        struct vlan_info *vlan_info;
 
                        vlan = vlan_dev_priv(vlandev);
                        if (!(vlan->flags & VLAN_FLAG_LOOSE_BINDING))
-                               dev_change_flags(vlandev, flgs | IFF_UP);
+                               dev_change_flags(vlandev, flgs | IFF_UP,
+                                                extack);
                        netif_stacked_transfer_operstate(dev, vlandev);
                }
                break;
 
  *     dev_change_flags - change device settings
  *     @dev: device
  *     @flags: device state flags
+ *     @extack: netlink extended ack
  *
  *     Change settings on device based state flags. The flags are
  *     in the userspace exported format.
  */
-int dev_change_flags(struct net_device *dev, unsigned int flags)
+int dev_change_flags(struct net_device *dev, unsigned int flags,
+                    struct netlink_ext_ack *extack)
 {
        int ret;
        unsigned int changes, old_flags = dev->flags, old_gflags = dev->gflags;
 
 
        switch (cmd) {
        case SIOCSIFFLAGS:      /* Set interface flags */
-               return dev_change_flags(dev, ifr->ifr_flags);
+               return dev_change_flags(dev, ifr->ifr_flags, NULL);
 
        case SIOCSIFMETRIC:     /* Set the metric on the interface
                                   (currently unused) */
 
 
 static int change_flags(struct net_device *dev, unsigned long new_flags)
 {
-       return dev_change_flags(dev, (unsigned int)new_flags);
+       return dev_change_flags(dev, (unsigned int)new_flags, NULL);
 }
 
 static ssize_t flags_store(struct device *dev, struct device_attribute *attr,
 
        }
 
        if (ifm->ifi_flags || ifm->ifi_change) {
-               err = dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm));
+               err = dev_change_flags(dev, rtnl_dev_combine_flags(dev, ifm),
+                                      extack);
                if (err < 0)
                        goto errout;
        }
 
                                inet_del_ifa(in_dev, ifap, 1);
                        break;
                }
-               ret = dev_change_flags(dev, ifr->ifr_flags);
+               ret = dev_change_flags(dev, ifr->ifr_flags, NULL);
                break;
 
        case SIOCSIFADDR:       /* Set interface address (and family) */
 
        for_each_netdev(&init_net, dev) {
                if (!(dev->flags & IFF_LOOPBACK) && !netdev_uses_dsa(dev))
                        continue;
-               if (dev_change_flags(dev, dev->flags | IFF_UP) < 0)
+               if (dev_change_flags(dev, dev->flags | IFF_UP, NULL) < 0)
                        pr_err("IP-Config: Failed to open %s\n", dev->name);
        }
 
                        if (ic_proto_enabled && !able)
                                continue;
                        oflags = dev->flags;
-                       if (dev_change_flags(dev, oflags | IFF_UP) < 0) {
+                       if (dev_change_flags(dev, oflags | IFF_UP, NULL) < 0) {
                                pr_err("IP-Config: Failed to open %s\n",
                                       dev->name);
                                continue;
                dev = d->dev;
                if (d != ic_dev && !netdev_uses_dsa(dev)) {
                        pr_debug("IP-Config: Downing %s\n", dev->name);
-                       dev_change_flags(dev, d->flags);
+                       dev_change_flags(dev, d->flags, NULL);
                }
                kfree(d);
        }
 
                return ERR_CAST(dev);
        }
 
-       err = dev_change_flags(dev, dev->flags | IFF_UP);
+       err = dev_change_flags(dev, dev->flags | IFF_UP, NULL);
        if (err < 0) {
                rtnl_delete_link(dev);
                rtnl_unlock();
 
                return ERR_CAST(dev);
        }
 
-       err = dev_change_flags(dev, dev->flags | IFF_UP);
+       err = dev_change_flags(dev, dev->flags | IFF_UP, NULL);
        if (err < 0) {
                rtnl_delete_link(dev);
                rtnl_unlock();
 
                return ERR_CAST(dev);
        }
 
-       err = dev_change_flags(dev, dev->flags | IFF_UP);
+       err = dev_change_flags(dev, dev->flags | IFF_UP, NULL);
        if (err < 0) {
                rtnl_delete_link(dev);
                rtnl_unlock();