ethtool: push the rtnl_lock into dev_ethtool()
Don't take the lock in net/core/dev_ioctl.c, we'll have things to do outside rtnl_lock soon. Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Leon Romanovsky <leonro@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c6e03dbe0c
commit
f49deaa64a
|
@ -518,9 +518,7 @@ int dev_ioctl(struct net *net, unsigned int cmd, struct ifreq *ifr,
|
|||
|
||||
case SIOCETHTOOL:
|
||||
dev_load(net, ifr->ifr_name);
|
||||
rtnl_lock();
|
||||
ret = dev_ethtool(net, ifr, data);
|
||||
rtnl_unlock();
|
||||
if (colon)
|
||||
*colon = ':';
|
||||
return ret;
|
||||
|
|
|
@ -2700,7 +2700,8 @@ static int ethtool_set_fecparam(struct net_device *dev, void __user *useraddr)
|
|||
|
||||
/* The main entry point in this file. Called from net/core/dev_ioctl.c */
|
||||
|
||||
int dev_ethtool(struct net *net, struct ifreq *ifr, void __user *useraddr)
|
||||
static int
|
||||
__dev_ethtool(struct net *net, struct ifreq *ifr, void __user *useraddr)
|
||||
{
|
||||
struct net_device *dev = __dev_get_by_name(net, ifr->ifr_name);
|
||||
u32 ethcmd, sub_cmd;
|
||||
|
@ -3000,6 +3001,17 @@ out:
|
|||
return rc;
|
||||
}
|
||||
|
||||
int dev_ethtool(struct net *net, struct ifreq *ifr, void __user *useraddr)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rtnl_lock();
|
||||
rc = __dev_ethtool(net, ifr, useraddr);
|
||||
rtnl_unlock();
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
struct ethtool_rx_flow_key {
|
||||
struct flow_dissector_key_basic basic;
|
||||
union {
|
||||
|
|
Loading…
Reference in New Issue