int dev_get_alias(const struct net_device *, char *, size_t);
 int dev_change_net_namespace(struct net_device *, struct net *, const char *);
 int __dev_set_mtu(struct net_device *, int);
+int dev_set_mtu_ext(struct net_device *dev, int mtu,
+                   struct netlink_ext_ack *extack);
 int dev_set_mtu(struct net_device *, int);
 int dev_change_tx_queue_len(struct net_device *, unsigned long);
 void dev_set_group(struct net_device *, int);
 
 EXPORT_SYMBOL(__dev_set_mtu);
 
 /**
- *     dev_set_mtu - Change maximum transfer unit
+ *     dev_set_mtu_ext - Change maximum transfer unit
  *     @dev: device
  *     @new_mtu: new transfer unit
+ *     @extack: netlink extended ack
  *
  *     Change the maximum transfer size of the network device.
  */
-int dev_set_mtu(struct net_device *dev, int new_mtu)
+int dev_set_mtu_ext(struct net_device *dev, int new_mtu,
+                   struct netlink_ext_ack *extack)
 {
        int err, orig_mtu;
 
 
        /* MTU must be positive, and in range */
        if (new_mtu < 0 || new_mtu < dev->min_mtu) {
-               net_err_ratelimited("%s: Invalid MTU %d requested, hw min %d\n",
-                                   dev->name, new_mtu, dev->min_mtu);
+               NL_SET_ERR_MSG(extack, "mtu less than device minimum");
                return -EINVAL;
        }
 
        if (dev->max_mtu > 0 && new_mtu > dev->max_mtu) {
-               net_err_ratelimited("%s: Invalid MTU %d requested, hw max %d\n",
-                                   dev->name, new_mtu, dev->max_mtu);
+               NL_SET_ERR_MSG(extack, "mtu greater than device maximum");
                return -EINVAL;
        }
 
        }
        return err;
 }
+
+int dev_set_mtu(struct net_device *dev, int new_mtu)
+{
+       struct netlink_ext_ack extack;
+       int err;
+
+       err = dev_set_mtu_ext(dev, new_mtu, &extack);
+       if (err)
+               net_err_ratelimited("%s: %s\n", dev->name, extack._msg);
+       return err;
+}
 EXPORT_SYMBOL(dev_set_mtu);
 
 /**