Commit f49deaa6 authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller

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: default avatarJakub Kicinski <kuba@kernel.org>
Reviewed-by: default avatarLeon Romanovsky <leonro@nvidia.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c6e03dbe
...@@ -518,9 +518,7 @@ int dev_ioctl(struct net *net, unsigned int cmd, struct ifreq *ifr, ...@@ -518,9 +518,7 @@ int dev_ioctl(struct net *net, unsigned int cmd, struct ifreq *ifr,
case SIOCETHTOOL: case SIOCETHTOOL:
dev_load(net, ifr->ifr_name); dev_load(net, ifr->ifr_name);
rtnl_lock();
ret = dev_ethtool(net, ifr, data); ret = dev_ethtool(net, ifr, data);
rtnl_unlock();
if (colon) if (colon)
*colon = ':'; *colon = ':';
return ret; return ret;
......
...@@ -2700,7 +2700,8 @@ static int ethtool_set_fecparam(struct net_device *dev, void __user *useraddr) ...@@ -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 */ /* 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); struct net_device *dev = __dev_get_by_name(net, ifr->ifr_name);
u32 ethcmd, sub_cmd; u32 ethcmd, sub_cmd;
...@@ -3000,6 +3001,17 @@ int dev_ethtool(struct net *net, struct ifreq *ifr, void __user *useraddr) ...@@ -3000,6 +3001,17 @@ int dev_ethtool(struct net *net, struct ifreq *ifr, void __user *useraddr)
return rc; 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 ethtool_rx_flow_key {
struct flow_dissector_key_basic basic; struct flow_dissector_key_basic basic;
union { union {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment