mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 15:54:15 +08:00
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;
|
slave_dev->flags |= IFF_SLAVE;
|
||||||
|
|
||||||
/* open the slave since the application closed it */
|
/* open the slave since the application closed it */
|
||||||
res = dev_open(slave_dev);
|
res = dev_open(slave_dev, extack);
|
||||||
if (res) {
|
if (res) {
|
||||||
netdev_dbg(bond_dev, "Opening slave %s failed\n", slave_dev->name);
|
netdev_dbg(bond_dev, "Opening slave %s failed\n", slave_dev->name);
|
||||||
goto err_restore_mac;
|
goto err_restore_mac;
|
||||||
|
@ -525,7 +525,7 @@ static int aq_set_ringparam(struct net_device *ndev,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ndev_running)
|
if (ndev_running)
|
||||||
err = dev_open(ndev);
|
err = dev_open(ndev, NULL);
|
||||||
|
|
||||||
err_exit:
|
err_exit:
|
||||||
return err;
|
return err;
|
||||||
|
@ -241,7 +241,7 @@ static int enic_set_ringparam(struct net_device *netdev,
|
|||||||
}
|
}
|
||||||
enic_init_vnic_resources(enic);
|
enic_init_vnic_resources(enic);
|
||||||
if (running) {
|
if (running) {
|
||||||
err = dev_open(netdev);
|
err = dev_open(netdev, NULL);
|
||||||
if (err)
|
if (err)
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
|
@ -624,7 +624,7 @@ static void hns_nic_self_test(struct net_device *ndev,
|
|||||||
clear_bit(NIC_STATE_TESTING, &priv->state);
|
clear_bit(NIC_STATE_TESTING, &priv->state);
|
||||||
|
|
||||||
if (if_running)
|
if (if_running)
|
||||||
(void)dev_open(ndev);
|
(void)dev_open(ndev, NULL);
|
||||||
}
|
}
|
||||||
/* Online tests aren't run; pass by default */
|
/* Online tests aren't run; pass by default */
|
||||||
|
|
||||||
|
@ -821,7 +821,7 @@ static int hns3_set_ringparam(struct net_device *ndev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (if_running)
|
if (if_running)
|
||||||
ret = dev_open(ndev);
|
ret = dev_open(ndev, NULL);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -539,7 +539,7 @@ static void efx_ethtool_self_test(struct net_device *net_dev,
|
|||||||
/* We need rx buffers and interrupts. */
|
/* We need rx buffers and interrupts. */
|
||||||
already_up = (efx->net_dev->flags & IFF_UP);
|
already_up = (efx->net_dev->flags & IFF_UP);
|
||||||
if (!already_up) {
|
if (!already_up) {
|
||||||
rc = dev_open(efx->net_dev);
|
rc = dev_open(efx->net_dev, NULL);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
netif_err(efx, drv, efx->net_dev,
|
netif_err(efx, drv, efx->net_dev,
|
||||||
"failed opening device.\n");
|
"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. */
|
/* We need rx buffers and interrupts. */
|
||||||
already_up = (efx->net_dev->flags & IFF_UP);
|
already_up = (efx->net_dev->flags & IFF_UP);
|
||||||
if (!already_up) {
|
if (!already_up) {
|
||||||
rc = dev_open(efx->net_dev);
|
rc = dev_open(efx->net_dev, NULL);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
netif_err(efx, drv, efx->net_dev,
|
netif_err(efx, drv, efx->net_dev,
|
||||||
"failed opening device.\n");
|
"failed opening device.\n");
|
||||||
|
@ -4082,7 +4082,7 @@ static void stmmac_reset_subtask(struct stmmac_priv *priv)
|
|||||||
|
|
||||||
set_bit(STMMAC_DOWN, &priv->state);
|
set_bit(STMMAC_DOWN, &priv->state);
|
||||||
dev_close(priv->dev);
|
dev_close(priv->dev);
|
||||||
dev_open(priv->dev);
|
dev_open(priv->dev, NULL);
|
||||||
clear_bit(STMMAC_DOWN, &priv->state);
|
clear_bit(STMMAC_DOWN, &priv->state);
|
||||||
clear_bit(STMMAC_RESETING, &priv->state);
|
clear_bit(STMMAC_RESETING, &priv->state);
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
|
@ -137,7 +137,7 @@ static int netvsc_open(struct net_device *net)
|
|||||||
* slave as up. If open fails, then slave will be
|
* slave as up. If open fails, then slave will be
|
||||||
* still be offline (and not used).
|
* still be offline (and not used).
|
||||||
*/
|
*/
|
||||||
ret = dev_open(vf_netdev);
|
ret = dev_open(vf_netdev, NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
netdev_warn(net,
|
netdev_warn(net,
|
||||||
"unable to open slave: %s: %d\n",
|
"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);
|
netif_addr_unlock_bh(ndev);
|
||||||
|
|
||||||
if (netif_running(ndev)) {
|
if (netif_running(ndev)) {
|
||||||
ret = dev_open(vf_netdev);
|
ret = dev_open(vf_netdev, NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
netdev_warn(vf_netdev,
|
netdev_warn(vf_netdev,
|
||||||
"unable to open: %d\n", ret);
|
"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);
|
primary_dev = rtnl_dereference(nfo_info->primary_dev);
|
||||||
if (primary_dev) {
|
if (primary_dev) {
|
||||||
err = dev_open(primary_dev);
|
err = dev_open(primary_dev, NULL);
|
||||||
if (err)
|
if (err)
|
||||||
goto err_primary_open;
|
goto err_primary_open;
|
||||||
}
|
}
|
||||||
|
|
||||||
standby_dev = rtnl_dereference(nfo_info->standby_dev);
|
standby_dev = rtnl_dereference(nfo_info->standby_dev);
|
||||||
if (standby_dev) {
|
if (standby_dev) {
|
||||||
err = dev_open(standby_dev);
|
err = dev_open(standby_dev, NULL);
|
||||||
if (err)
|
if (err)
|
||||||
goto err_standby_open;
|
goto err_standby_open;
|
||||||
}
|
}
|
||||||
@ -517,7 +517,7 @@ static int net_failover_slave_register(struct net_device *slave_dev,
|
|||||||
dev_hold(slave_dev);
|
dev_hold(slave_dev);
|
||||||
|
|
||||||
if (netif_running(failover_dev)) {
|
if (netif_running(failover_dev)) {
|
||||||
err = dev_open(slave_dev);
|
err = dev_open(slave_dev, NULL);
|
||||||
if (err && (err != -EBUSY)) {
|
if (err && (err != -EBUSY)) {
|
||||||
netdev_err(failover_dev, "Opening slave %s failed err:%d\n",
|
netdev_err(failover_dev, "Opening slave %s failed err:%d\n",
|
||||||
slave_dev->name, err);
|
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
|
/* We need to bring up the slave after the rename by udev in case
|
||||||
* open failed with EBUSY when it was registered.
|
* open failed with EBUSY when it was registered.
|
||||||
*/
|
*/
|
||||||
dev_open(slave_dev);
|
dev_open(slave_dev, NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1212,7 +1212,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev,
|
|||||||
goto err_port_enter;
|
goto err_port_enter;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = dev_open(port_dev);
|
err = dev_open(port_dev, extack);
|
||||||
if (err) {
|
if (err) {
|
||||||
netdev_dbg(dev, "Device %s opening failed\n",
|
netdev_dbg(dev, "Device %s opening failed\n",
|
||||||
portname);
|
portname);
|
||||||
|
@ -690,7 +690,7 @@ static int prism2_open(struct net_device *dev)
|
|||||||
/* Master radio interface is needed for all operation, so open
|
/* Master radio interface is needed for all operation, so open
|
||||||
* it automatically when any virtual net_device is opened. */
|
* it automatically when any virtual net_device is opened. */
|
||||||
local->master_dev_auto_open = 1;
|
local->master_dev_auto_open = 1;
|
||||||
dev_open(local->dev);
|
dev_open(local->dev, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
netif_device_attach(dev);
|
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);
|
qeth_l2_set_rx_mode(card->dev);
|
||||||
} else {
|
} else {
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
dev_open(card->dev);
|
dev_open(card->dev, NULL);
|
||||||
rtnl_unlock();
|
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_open(card->dev);
|
||||||
qeth_l3_set_rx_mode(card->dev);
|
qeth_l3_set_rx_mode(card->dev);
|
||||||
} else {
|
} else {
|
||||||
dev_open(card->dev);
|
dev_open(card->dev, NULL);
|
||||||
}
|
}
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
}
|
}
|
||||||
|
@ -1172,7 +1172,7 @@ static int ethsw_open(struct ethsw_core *ethsw)
|
|||||||
|
|
||||||
for (i = 0; i < ethsw->sw_attr.num_ifs; i++) {
|
for (i = 0; i < ethsw->sw_attr.num_ifs; i++) {
|
||||||
port_priv = ethsw->ports[i];
|
port_priv = ethsw->ports[i];
|
||||||
err = dev_open(port_priv->netdev);
|
err = dev_open(port_priv->netdev, NULL);
|
||||||
if (err) {
|
if (err) {
|
||||||
netdev_err(port_priv->netdev, "dev_open err %d\n", err);
|
netdev_err(port_priv->netdev, "dev_open err %d\n", err);
|
||||||
return 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));
|
mod_timer(&devdata->irq_poll_timer, msecs_to_jiffies(2));
|
||||||
|
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
dev_open(netdev);
|
dev_open(netdev, NULL);
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
|
|
||||||
complete_func(dev, 0);
|
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_rcu(struct net *net, const char *name);
|
||||||
struct net_device *__dev_get_by_name(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_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(struct net_device *dev);
|
||||||
void dev_close_many(struct list_head *head, bool unlink);
|
void dev_close_many(struct list_head *head, bool unlink);
|
||||||
void dev_disable_lro(struct net_device *dev);
|
void dev_disable_lro(struct net_device *dev);
|
||||||
|
@ -607,7 +607,7 @@ static void ifup(struct net_device *netdev)
|
|||||||
int err;
|
int err;
|
||||||
|
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
err = dev_open(netdev);
|
err = dev_open(netdev, NULL);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
BT_INFO("iface %s cannot be opened (%d)", netdev->name, err);
|
BT_INFO("iface %s cannot be opened (%d)", netdev->name, err);
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
|
@ -1406,7 +1406,8 @@ static int __dev_open(struct net_device *dev)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* dev_open - prepare an interface for use.
|
* 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
|
* Takes a device from down to up state. The device's private open
|
||||||
* function is invoked and then the multicast lists are loaded. Finally
|
* 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
|
* Calling this function on an active interface is a nop. On a failure
|
||||||
* a negative errno code is returned.
|
* 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;
|
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);
|
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) {
|
if (err) {
|
||||||
np_err(np, "failed to open %s\n", ndev->name);
|
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;
|
dev->flags |= IFF_MULTICAST;
|
||||||
if (!ipmr_init_vif_indev(dev))
|
if (!ipmr_init_vif_indev(dev))
|
||||||
goto failure;
|
goto failure;
|
||||||
if (dev_open(dev))
|
if (dev_open(dev, NULL))
|
||||||
goto failure;
|
goto failure;
|
||||||
dev_hold(dev);
|
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))
|
if (!ipmr_init_vif_indev(dev))
|
||||||
goto failure;
|
goto failure;
|
||||||
if (dev_open(dev))
|
if (dev_open(dev, NULL))
|
||||||
goto failure;
|
goto failure;
|
||||||
|
|
||||||
dev_hold(dev);
|
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);
|
dev = __dev_get_by_name(net, p.name);
|
||||||
if (!dev)
|
if (!dev)
|
||||||
goto err_exit;
|
goto err_exit;
|
||||||
err = dev_open(dev);
|
err = dev_open(dev, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -655,7 +655,7 @@ static struct net_device *ip6mr_reg_vif(struct net *net, struct mr_table *mrt)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev_open(dev))
|
if (dev_open(dev, NULL))
|
||||||
goto failure;
|
goto failure;
|
||||||
|
|
||||||
dev_hold(dev);
|
dev_hold(dev);
|
||||||
|
Loading…
Reference in New Issue
Block a user