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

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
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -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;
+13 −1
Original line number Diff line number Diff line
@@ -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 {