net: consolidate and fix ethtool_ops->get_settings calling
This patch does several things: - introduces __ethtool_get_settings which is called from ethtool code and from drivers as well. Put ASSERT_RTNL there. - dev_ethtool_get_settings() is replaced by __ethtool_get_settings() - changes calling in drivers so rtnl locking is respected. In iboe_get_rate was previously ->get_settings() called unlocked. This fixes it. Also prb_calc_retire_blk_tmo() in af_packet.c had the same problem. Also fixed by calling __dev_get_by_index() instead of dev_get_by_index() and holding rtnl_lock for both calls. - introduces rtnl_lock in bnx2fc_vport_create() and fcoe_vport_create() so bnx2fc_if_create() and fcoe_if_create() are called locked as they are from other places. - use __ethtool_get_settings() in bonding code Signed-off-by: Jiri Pirko <jpirko@redhat.com> v2->v3: -removed dev_ethtool_get_settings() -added ASSERT_RTNL into __ethtool_get_settings() -prb_calc_retire_blk_tmo - use __dev_get_by_index() and lock around it and __ethtool_get_settings() call v1->v2: add missing export_symbol Reviewed-by: Ben Hutchings <bhutchings@solarflare.com> [except FCoE bits] Acked-by: Ralf Baechle <ralf@linux-mips.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
c5dac7c998
commit
4bc71cb983
@ -4565,30 +4565,6 @@ void dev_set_rx_mode(struct net_device *dev)
|
||||
netif_addr_unlock_bh(dev);
|
||||
}
|
||||
|
||||
/**
|
||||
* dev_ethtool_get_settings - call device's ethtool_ops::get_settings()
|
||||
* @dev: device
|
||||
* @cmd: memory area for ethtool_ops::get_settings() result
|
||||
*
|
||||
* The cmd arg is initialized properly (cleared and
|
||||
* ethtool_cmd::cmd field set to ETHTOOL_GSET).
|
||||
*
|
||||
* Return device's ethtool_ops::get_settings() result value or
|
||||
* -EOPNOTSUPP when device doesn't expose
|
||||
* ethtool_ops::get_settings() operation.
|
||||
*/
|
||||
int dev_ethtool_get_settings(struct net_device *dev,
|
||||
struct ethtool_cmd *cmd)
|
||||
{
|
||||
if (!dev->ethtool_ops || !dev->ethtool_ops->get_settings)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
memset(cmd, 0, sizeof(struct ethtool_cmd));
|
||||
cmd->cmd = ETHTOOL_GSET;
|
||||
return dev->ethtool_ops->get_settings(dev, cmd);
|
||||
}
|
||||
EXPORT_SYMBOL(dev_ethtool_get_settings);
|
||||
|
||||
/**
|
||||
* dev_get_flags - get flags reported to userspace
|
||||
* @dev: device
|
||||
|
Reference in New Issue
Block a user