Skip to content

Commit

Permalink
ethtool: push the rtnl_lock into dev_ethtool()
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Leon Romanovsky <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
kuba-moo authored and davem330 committed Nov 1, 2021
1 parent c6e03db commit f49deaa
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 3 deletions.
2 changes: 0 additions & 2 deletions net/core/dev_ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
14 changes: 13 additions & 1 deletion net/ethtool/ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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 {
Expand Down

0 comments on commit f49deaa

Please sign in to comment.