提交 f49deaa6 编写于 作者: J Jakub Kicinski 提交者: 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: NJakub Kicinski <kuba@kernel.org>
Reviewed-by: NLeon Romanovsky <leonro@nvidia.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 c6e03dbe
......@@ -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 @@ int dev_ethtool(struct net *net, struct ifreq *ifr, void __user *useraddr)
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 {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册