net: core: dev: Add extack argument to dev_open()
In order to pass extack together with NETDEV_PRE_UP notifications, it's necessary to route the extack to __dev_open() from diverse (possibly indirect) callers. One prominent API through which the notification is invoked is dev_open(). Therefore extend dev_open() with and extra extack argument and update all users. Most of the calls end up just encoding NULL, but bond and team drivers have the extack readily available. 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:
parent
fdb8b29867
commit
00f54e6892
|
@ -1538,7 +1538,7 @@ int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
|
|||
slave_dev->flags |= IFF_SLAVE;
|
||||
|
||||
/* open the slave since the application closed it */
|
||||
res = dev_open(slave_dev);
|
||||
res = dev_open(slave_dev, extack);
|
||||
if (res) {
|
||||
netdev_dbg(bond_dev, "Opening slave %s failed\n", slave_dev->name);
|
||||
goto err_restore_mac;
|
||||
|
|
|
@ -525,7 +525,7 @@ static int aq_set_ringparam(struct net_device *ndev,
|
|||
}
|
||||
}
|
||||
if (ndev_running)
|
||||
err = dev_open(ndev);
|
||||
err = dev_open(ndev, NULL);
|
||||
|
||||
err_exit:
|
||||
return err;
|
||||
|
|
|
@ -241,7 +241,7 @@ static int enic_set_ringparam(struct net_device *netdev,
|
|||
}
|
||||
enic_init_vnic_resources(enic);
|
||||
if (running) {
|
||||
err = dev_open(netdev);
|
||||
err = dev_open(netdev, NULL);
|
||||
if (err)
|
||||
goto err_out;
|
||||
}
|
||||
|
|
|
@ -624,7 +624,7 @@ static void hns_nic_self_test(struct net_device *ndev,
|
|||
clear_bit(NIC_STATE_TESTING, &priv->state);
|
||||
|
||||
if (if_running)
|
||||
(void)dev_open(ndev);
|
||||
(void)dev_open(ndev, NULL);
|
||||
}
|
||||
/* Online tests aren't run; pass by default */
|
||||
|
||||
|
|
|
@ -821,7 +821,7 @@ static int hns3_set_ringparam(struct net_device *ndev,
|
|||
}
|
||||
|
||||
if (if_running)
|
||||
ret = dev_open(ndev);
|
||||
ret = dev_open(ndev, NULL);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -539,7 +539,7 @@ static void efx_ethtool_self_test(struct net_device *net_dev,
|
|||
/* We need rx buffers and interrupts. */
|
||||
already_up = (efx->net_dev->flags & IFF_UP);
|
||||
if (!already_up) {
|
||||
rc = dev_open(efx->net_dev);
|
||||
rc = dev_open(efx->net_dev, NULL);
|
||||
if (rc) {
|
||||
netif_err(efx, drv, efx->net_dev,
|
||||
"failed opening device.\n");
|
||||
|
|
|
@ -517,7 +517,7 @@ static void ef4_ethtool_self_test(struct net_device *net_dev,
|
|||
/* We need rx buffers and interrupts. */
|
||||
already_up = (efx->net_dev->flags & IFF_UP);
|
||||
if (!already_up) {
|
||||
rc = dev_open(efx->net_dev);
|
||||
rc = dev_open(efx->net_dev, NULL);
|
||||
if (rc) {
|
||||
netif_err(efx, drv, efx->net_dev,
|
||||
"failed opening device.\n");
|
||||
|
|
|
@ -4082,7 +4082,7 @@ static void stmmac_reset_subtask(struct stmmac_priv *priv)
|
|||
|
||||
set_bit(STMMAC_DOWN, &priv->state);
|
||||
dev_close(priv->dev);
|
||||
dev_open(priv->dev);
|
||||
dev_open(priv->dev, NULL);
|
||||
clear_bit(STMMAC_DOWN, &priv->state);
|
||||
clear_bit(STMMAC_RESETING, &priv->state);
|
||||
rtnl_unlock();
|
||||
|
|
|
@ -137,7 +137,7 @@ static int netvsc_open(struct net_device *net)
|
|||
* slave as up. If open fails, then slave will be
|
||||
* still be offline (and not used).
|
||||
*/
|
||||
ret = dev_open(vf_netdev);
|
||||
ret = dev_open(vf_netdev, NULL);
|
||||
if (ret)
|
||||
netdev_warn(net,
|
||||
"unable to open slave: %s: %d\n",
|
||||
|
@ -2002,7 +2002,7 @@ static void __netvsc_vf_setup(struct net_device *ndev,
|
|||
netif_addr_unlock_bh(ndev);
|
||||
|
||||
if (netif_running(ndev)) {
|
||||
ret = dev_open(vf_netdev);
|
||||
ret = dev_open(vf_netdev, NULL);
|
||||
if (ret)
|
||||
netdev_warn(vf_netdev,
|
||||
"unable to open: %d\n", ret);
|
||||
|
|
|
@ -40,14 +40,14 @@ static int net_failover_open(struct net_device *dev)
|
|||
|
||||
primary_dev = rtnl_dereference(nfo_info->primary_dev);
|
||||
if (primary_dev) {
|
||||
err = dev_open(primary_dev);
|
||||
err = dev_open(primary_dev, NULL);
|
||||
if (err)
|
||||
goto err_primary_open;
|
||||
}
|
||||
|
||||
standby_dev = rtnl_dereference(nfo_info->standby_dev);
|
||||
if (standby_dev) {
|
||||
err = dev_open(standby_dev);
|
||||
err = dev_open(standby_dev, NULL);
|
||||
if (err)
|
||||
goto err_standby_open;
|
||||
}
|
||||
|
@ -517,7 +517,7 @@ static int net_failover_slave_register(struct net_device *slave_dev,
|
|||
dev_hold(slave_dev);
|
||||
|
||||
if (netif_running(failover_dev)) {
|
||||
err = dev_open(slave_dev);
|
||||
err = dev_open(slave_dev, NULL);
|
||||
if (err && (err != -EBUSY)) {
|
||||
netdev_err(failover_dev, "Opening slave %s failed err:%d\n",
|
||||
slave_dev->name, err);
|
||||
|
@ -680,7 +680,7 @@ static int net_failover_slave_name_change(struct net_device *slave_dev,
|
|||
/* We need to bring up the slave after the rename by udev in case
|
||||
* open failed with EBUSY when it was registered.
|
||||
*/
|
||||
dev_open(slave_dev);
|
||||
dev_open(slave_dev, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1212,7 +1212,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev,
|
|||
goto err_port_enter;
|
||||
}
|
||||
|
||||
err = dev_open(port_dev);
|
||||
err = dev_open(port_dev, extack);
|
||||
if (err) {
|
||||
netdev_dbg(dev, "Device %s opening failed\n",
|
||||
portname);
|
||||
|
|
|
@ -690,7 +690,7 @@ static int prism2_open(struct net_device *dev)
|
|||
/* Master radio interface is needed for all operation, so open
|
||||
* it automatically when any virtual net_device is opened. */
|
||||
local->master_dev_auto_open = 1;
|
||||
dev_open(local->dev);
|
||||
dev_open(local->dev, NULL);
|
||||
}
|
||||
|
||||
netif_device_attach(dev);
|
||||
|
|
|
@ -1007,7 +1007,7 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)
|
|||
qeth_l2_set_rx_mode(card->dev);
|
||||
} else {
|
||||
rtnl_lock();
|
||||
dev_open(card->dev);
|
||||
dev_open(card->dev, NULL);
|
||||
rtnl_unlock();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2417,7 +2417,7 @@ static int __qeth_l3_set_online(struct ccwgroup_device *gdev, int recovery_mode)
|
|||
__qeth_l3_open(card->dev);
|
||||
qeth_l3_set_rx_mode(card->dev);
|
||||
} else {
|
||||
dev_open(card->dev);
|
||||
dev_open(card->dev, NULL);
|
||||
}
|
||||
rtnl_unlock();
|
||||
}
|
||||
|
|
|
@ -1172,7 +1172,7 @@ static int ethsw_open(struct ethsw_core *ethsw)
|
|||
|
||||
for (i = 0; i < ethsw->sw_attr.num_ifs; i++) {
|
||||
port_priv = ethsw->ports[i];
|
||||
err = dev_open(port_priv->netdev);
|
||||
err = dev_open(port_priv->netdev, NULL);
|
||||
if (err) {
|
||||
netdev_err(port_priv->netdev, "dev_open err %d\n", err);
|
||||
return err;
|
||||
|
|
|
@ -2095,7 +2095,7 @@ static int visornic_resume(struct visor_device *dev,
|
|||
mod_timer(&devdata->irq_poll_timer, msecs_to_jiffies(2));
|
||||
|
||||
rtnl_lock();
|
||||
dev_open(netdev);
|
||||
dev_open(netdev, NULL);
|
||||
rtnl_unlock();
|
||||
|
||||
complete_func(dev, 0);
|
||||
|
|
|
@ -2605,7 +2605,7 @@ struct net_device *dev_get_by_name(struct net *net, const char *name);
|
|||
struct net_device *dev_get_by_name_rcu(struct net *net, const char *name);
|
||||
struct net_device *__dev_get_by_name(struct net *net, const char *name);
|
||||
int dev_alloc_name(struct net_device *dev, const char *name);
|
||||
int dev_open(struct net_device *dev);
|
||||
int dev_open(struct net_device *dev, struct netlink_ext_ack *extack);
|
||||
void dev_close(struct net_device *dev);
|
||||
void dev_close_many(struct list_head *head, bool unlink);
|
||||
void dev_disable_lro(struct net_device *dev);
|
||||
|
|
|
@ -607,7 +607,7 @@ static void ifup(struct net_device *netdev)
|
|||
int err;
|
||||
|
||||
rtnl_lock();
|
||||
err = dev_open(netdev);
|
||||
err = dev_open(netdev, NULL);
|
||||
if (err < 0)
|
||||
BT_INFO("iface %s cannot be opened (%d)", netdev->name, err);
|
||||
rtnl_unlock();
|
||||
|
|
|
@ -1406,7 +1406,8 @@ static int __dev_open(struct net_device *dev)
|
|||
|
||||
/**
|
||||
* dev_open - prepare an interface for use.
|
||||
* @dev: device to open
|
||||
* @dev: device to open
|
||||
* @extack: netlink extended ack
|
||||
*
|
||||
* Takes a device from down to up state. The device's private open
|
||||
* function is invoked and then the multicast lists are loaded. Finally
|
||||
|
@ -1416,7 +1417,7 @@ static int __dev_open(struct net_device *dev)
|
|||
* Calling this function on an active interface is a nop. On a failure
|
||||
* a negative errno code is returned.
|
||||
*/
|
||||
int dev_open(struct net_device *dev)
|
||||
int dev_open(struct net_device *dev, struct netlink_ext_ack *extack)
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
|
|
@ -663,7 +663,7 @@ int netpoll_setup(struct netpoll *np)
|
|||
|
||||
np_info(np, "device %s not up yet, forcing it\n", np->dev_name);
|
||||
|
||||
err = dev_open(ndev);
|
||||
err = dev_open(ndev, NULL);
|
||||
|
||||
if (err) {
|
||||
np_err(np, "failed to open %s\n", ndev->name);
|
||||
|
|
|
@ -506,7 +506,7 @@ static struct net_device *ipmr_new_tunnel(struct net *net, struct vifctl *v)
|
|||
dev->flags |= IFF_MULTICAST;
|
||||
if (!ipmr_init_vif_indev(dev))
|
||||
goto failure;
|
||||
if (dev_open(dev))
|
||||
if (dev_open(dev, NULL))
|
||||
goto failure;
|
||||
dev_hold(dev);
|
||||
}
|
||||
|
@ -589,7 +589,7 @@ static struct net_device *ipmr_reg_vif(struct net *net, struct mr_table *mrt)
|
|||
|
||||
if (!ipmr_init_vif_indev(dev))
|
||||
goto failure;
|
||||
if (dev_open(dev))
|
||||
if (dev_open(dev, NULL))
|
||||
goto failure;
|
||||
|
||||
dev_hold(dev);
|
||||
|
|
|
@ -2820,7 +2820,7 @@ int addrconf_set_dstaddr(struct net *net, void __user *arg)
|
|||
dev = __dev_get_by_name(net, p.name);
|
||||
if (!dev)
|
||||
goto err_exit;
|
||||
err = dev_open(dev);
|
||||
err = dev_open(dev, NULL);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -655,7 +655,7 @@ static struct net_device *ip6mr_reg_vif(struct net *net, struct mr_table *mrt)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (dev_open(dev))
|
||||
if (dev_open(dev, NULL))
|
||||
goto failure;
|
||||
|
||||
dev_hold(dev);
|
||||
|
|
Loading…
Reference in New Issue