net: core: dev: Attach extack to NETDEV_PRE_UP
Drivers may need to validate configuration of a device that's about to be upped. Should the validation fail, there's currently no way to communicate details of the failure to the user, beyond an error number. To mend that, change __dev_open() to take an extack argument and pass it from __dev_change_flags() and dev_open(), where it was propagated in the previous patches. Change __dev_open() to call call_netdevice_notifiers_extack() so that the passed-in extack is attached to the NETDEV_PRE_UP notifier. Signed-off-by: Petr Machata <petrm@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Reviewed-by: Ido Schimmel <idosch@mellanox.com> Reviewed-by: David Ahern <dsahern@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
2637260534
Коммит
40c900aa1f
|
@ -1364,7 +1364,7 @@ void netdev_notify_peers(struct net_device *dev)
|
|||
}
|
||||
EXPORT_SYMBOL(netdev_notify_peers);
|
||||
|
||||
static int __dev_open(struct net_device *dev)
|
||||
static int __dev_open(struct net_device *dev, struct netlink_ext_ack *extack)
|
||||
{
|
||||
const struct net_device_ops *ops = dev->netdev_ops;
|
||||
int ret;
|
||||
|
@ -1380,7 +1380,7 @@ static int __dev_open(struct net_device *dev)
|
|||
*/
|
||||
netpoll_poll_disable(dev);
|
||||
|
||||
ret = call_netdevice_notifiers(NETDEV_PRE_UP, dev);
|
||||
ret = call_netdevice_notifiers_extack(NETDEV_PRE_UP, dev, extack);
|
||||
ret = notifier_to_errno(ret);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -1427,7 +1427,7 @@ int dev_open(struct net_device *dev, struct netlink_ext_ack *extack)
|
|||
if (dev->flags & IFF_UP)
|
||||
return 0;
|
||||
|
||||
ret = __dev_open(dev);
|
||||
ret = __dev_open(dev, extack);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@ -7547,7 +7547,7 @@ int __dev_change_flags(struct net_device *dev, unsigned int flags,
|
|||
if (old_flags & IFF_UP)
|
||||
__dev_close(dev);
|
||||
else
|
||||
ret = __dev_open(dev);
|
||||
ret = __dev_open(dev, extack);
|
||||
}
|
||||
|
||||
if ((flags ^ dev->gflags) & IFF_PROMISC) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче