Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Petr Machata and committed by
David S. Miller
00f54e68 fdb8b298

+30 -29
+1 -1
drivers/net/bonding/bond_main.c
··· 1538 1538 slave_dev->flags |= IFF_SLAVE; 1539 1539 1540 1540 /* open the slave since the application closed it */ 1541 - res = dev_open(slave_dev); 1541 + res = dev_open(slave_dev, extack); 1542 1542 if (res) { 1543 1543 netdev_dbg(bond_dev, "Opening slave %s failed\n", slave_dev->name); 1544 1544 goto err_restore_mac;
+1 -1
drivers/net/ethernet/aquantia/atlantic/aq_ethtool.c
··· 525 525 } 526 526 } 527 527 if (ndev_running) 528 - err = dev_open(ndev); 528 + err = dev_open(ndev, NULL); 529 529 530 530 err_exit: 531 531 return err;
+1 -1
drivers/net/ethernet/cisco/enic/enic_ethtool.c
··· 241 241 } 242 242 enic_init_vnic_resources(enic); 243 243 if (running) { 244 - err = dev_open(netdev); 244 + err = dev_open(netdev, NULL); 245 245 if (err) 246 246 goto err_out; 247 247 }
+1 -1
drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
··· 624 624 clear_bit(NIC_STATE_TESTING, &priv->state); 625 625 626 626 if (if_running) 627 - (void)dev_open(ndev); 627 + (void)dev_open(ndev, NULL); 628 628 } 629 629 /* Online tests aren't run; pass by default */ 630 630
+1 -1
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
··· 821 821 } 822 822 823 823 if (if_running) 824 - ret = dev_open(ndev); 824 + ret = dev_open(ndev, NULL); 825 825 826 826 return ret; 827 827 }
+1 -1
drivers/net/ethernet/sfc/ethtool.c
··· 539 539 /* We need rx buffers and interrupts. */ 540 540 already_up = (efx->net_dev->flags & IFF_UP); 541 541 if (!already_up) { 542 - rc = dev_open(efx->net_dev); 542 + rc = dev_open(efx->net_dev, NULL); 543 543 if (rc) { 544 544 netif_err(efx, drv, efx->net_dev, 545 545 "failed opening device.\n");
+1 -1
drivers/net/ethernet/sfc/falcon/ethtool.c
··· 517 517 /* We need rx buffers and interrupts. */ 518 518 already_up = (efx->net_dev->flags & IFF_UP); 519 519 if (!already_up) { 520 - rc = dev_open(efx->net_dev); 520 + rc = dev_open(efx->net_dev, NULL); 521 521 if (rc) { 522 522 netif_err(efx, drv, efx->net_dev, 523 523 "failed opening device.\n");
+1 -1
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
··· 4082 4082 4083 4083 set_bit(STMMAC_DOWN, &priv->state); 4084 4084 dev_close(priv->dev); 4085 - dev_open(priv->dev); 4085 + dev_open(priv->dev, NULL); 4086 4086 clear_bit(STMMAC_DOWN, &priv->state); 4087 4087 clear_bit(STMMAC_RESETING, &priv->state); 4088 4088 rtnl_unlock();
+2 -2
drivers/net/hyperv/netvsc_drv.c
··· 137 137 * slave as up. If open fails, then slave will be 138 138 * still be offline (and not used). 139 139 */ 140 - ret = dev_open(vf_netdev); 140 + ret = dev_open(vf_netdev, NULL); 141 141 if (ret) 142 142 netdev_warn(net, 143 143 "unable to open slave: %s: %d\n", ··· 2002 2002 netif_addr_unlock_bh(ndev); 2003 2003 2004 2004 if (netif_running(ndev)) { 2005 - ret = dev_open(vf_netdev); 2005 + ret = dev_open(vf_netdev, NULL); 2006 2006 if (ret) 2007 2007 netdev_warn(vf_netdev, 2008 2008 "unable to open: %d\n", ret);
+4 -4
drivers/net/net_failover.c
··· 40 40 41 41 primary_dev = rtnl_dereference(nfo_info->primary_dev); 42 42 if (primary_dev) { 43 - err = dev_open(primary_dev); 43 + err = dev_open(primary_dev, NULL); 44 44 if (err) 45 45 goto err_primary_open; 46 46 } 47 47 48 48 standby_dev = rtnl_dereference(nfo_info->standby_dev); 49 49 if (standby_dev) { 50 - err = dev_open(standby_dev); 50 + err = dev_open(standby_dev, NULL); 51 51 if (err) 52 52 goto err_standby_open; 53 53 } ··· 517 517 dev_hold(slave_dev); 518 518 519 519 if (netif_running(failover_dev)) { 520 - err = dev_open(slave_dev); 520 + err = dev_open(slave_dev, NULL); 521 521 if (err && (err != -EBUSY)) { 522 522 netdev_err(failover_dev, "Opening slave %s failed err:%d\n", 523 523 slave_dev->name, err); ··· 680 680 /* We need to bring up the slave after the rename by udev in case 681 681 * open failed with EBUSY when it was registered. 682 682 */ 683 - dev_open(slave_dev); 683 + dev_open(slave_dev, NULL); 684 684 685 685 return 0; 686 686 }
+1 -1
drivers/net/team/team.c
··· 1212 1212 goto err_port_enter; 1213 1213 } 1214 1214 1215 - err = dev_open(port_dev); 1215 + err = dev_open(port_dev, extack); 1216 1216 if (err) { 1217 1217 netdev_dbg(dev, "Device %s opening failed\n", 1218 1218 portname);
+1 -1
drivers/net/wireless/intersil/hostap/hostap_main.c
··· 690 690 /* Master radio interface is needed for all operation, so open 691 691 * it automatically when any virtual net_device is opened. */ 692 692 local->master_dev_auto_open = 1; 693 - dev_open(local->dev); 693 + dev_open(local->dev, NULL); 694 694 } 695 695 696 696 netif_device_attach(dev);
+1 -1
drivers/s390/net/qeth_l2_main.c
··· 1007 1007 qeth_l2_set_rx_mode(card->dev); 1008 1008 } else { 1009 1009 rtnl_lock(); 1010 - dev_open(card->dev); 1010 + dev_open(card->dev, NULL); 1011 1011 rtnl_unlock(); 1012 1012 } 1013 1013 }
+1 -1
drivers/s390/net/qeth_l3_main.c
··· 2417 2417 __qeth_l3_open(card->dev); 2418 2418 qeth_l3_set_rx_mode(card->dev); 2419 2419 } else { 2420 - dev_open(card->dev); 2420 + dev_open(card->dev, NULL); 2421 2421 } 2422 2422 rtnl_unlock(); 2423 2423 }
+1 -1
drivers/staging/fsl-dpaa2/ethsw/ethsw.c
··· 1172 1172 1173 1173 for (i = 0; i < ethsw->sw_attr.num_ifs; i++) { 1174 1174 port_priv = ethsw->ports[i]; 1175 - err = dev_open(port_priv->netdev); 1175 + err = dev_open(port_priv->netdev, NULL); 1176 1176 if (err) { 1177 1177 netdev_err(port_priv->netdev, "dev_open err %d\n", err); 1178 1178 return err;
+1 -1
drivers/staging/unisys/visornic/visornic_main.c
··· 2095 2095 mod_timer(&devdata->irq_poll_timer, msecs_to_jiffies(2)); 2096 2096 2097 2097 rtnl_lock(); 2098 - dev_open(netdev); 2098 + dev_open(netdev, NULL); 2099 2099 rtnl_unlock(); 2100 2100 2101 2101 complete_func(dev, 0);
+1 -1
include/linux/netdevice.h
··· 2605 2605 struct net_device *dev_get_by_name_rcu(struct net *net, const char *name); 2606 2606 struct net_device *__dev_get_by_name(struct net *net, const char *name); 2607 2607 int dev_alloc_name(struct net_device *dev, const char *name); 2608 - int dev_open(struct net_device *dev); 2608 + int dev_open(struct net_device *dev, struct netlink_ext_ack *extack); 2609 2609 void dev_close(struct net_device *dev); 2610 2610 void dev_close_many(struct list_head *head, bool unlink); 2611 2611 void dev_disable_lro(struct net_device *dev);
+1 -1
net/bluetooth/6lowpan.c
··· 607 607 int err; 608 608 609 609 rtnl_lock(); 610 - err = dev_open(netdev); 610 + err = dev_open(netdev, NULL); 611 611 if (err < 0) 612 612 BT_INFO("iface %s cannot be opened (%d)", netdev->name, err); 613 613 rtnl_unlock();
+3 -2
net/core/dev.c
··· 1406 1406 1407 1407 /** 1408 1408 * dev_open - prepare an interface for use. 1409 - * @dev: device to open 1409 + * @dev: device to open 1410 + * @extack: netlink extended ack 1410 1411 * 1411 1412 * Takes a device from down to up state. The device's private open 1412 1413 * function is invoked and then the multicast lists are loaded. Finally ··· 1417 1416 * Calling this function on an active interface is a nop. On a failure 1418 1417 * a negative errno code is returned. 1419 1418 */ 1420 - int dev_open(struct net_device *dev) 1419 + int dev_open(struct net_device *dev, struct netlink_ext_ack *extack) 1421 1420 { 1422 1421 int ret; 1423 1422
+1 -1
net/core/netpoll.c
··· 663 663 664 664 np_info(np, "device %s not up yet, forcing it\n", np->dev_name); 665 665 666 - err = dev_open(ndev); 666 + err = dev_open(ndev, NULL); 667 667 668 668 if (err) { 669 669 np_err(np, "failed to open %s\n", ndev->name);
+2 -2
net/ipv4/ipmr.c
··· 506 506 dev->flags |= IFF_MULTICAST; 507 507 if (!ipmr_init_vif_indev(dev)) 508 508 goto failure; 509 - if (dev_open(dev)) 509 + if (dev_open(dev, NULL)) 510 510 goto failure; 511 511 dev_hold(dev); 512 512 } ··· 589 589 590 590 if (!ipmr_init_vif_indev(dev)) 591 591 goto failure; 592 - if (dev_open(dev)) 592 + if (dev_open(dev, NULL)) 593 593 goto failure; 594 594 595 595 dev_hold(dev);
+1 -1
net/ipv6/addrconf.c
··· 2820 2820 dev = __dev_get_by_name(net, p.name); 2821 2821 if (!dev) 2822 2822 goto err_exit; 2823 - err = dev_open(dev); 2823 + err = dev_open(dev, NULL); 2824 2824 } 2825 2825 } 2826 2826 #endif
+1 -1
net/ipv6/ip6mr.c
··· 655 655 return NULL; 656 656 } 657 657 658 - if (dev_open(dev)) 658 + if (dev_open(dev, NULL)) 659 659 goto failure; 660 660 661 661 dev_hold(dev);