]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ethtool: push the rtnl_lock into dev_ethtool()
authorJakub Kicinski <kuba@kernel.org>
Sat, 30 Oct 2021 17:18:48 +0000 (10:18 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 1 Nov 2021 13:26:07 +0000 (13:26 +0000)
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>
net/core/dev_ioctl.c
net/ethtool/ioctl.c

index 0e87237fd8712dde3311978020dfb6ec8e3dd22a..cbab5fec64b12df9355b154bdcaa0f48701966e8 100644 (file)
@@ -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;
index 44430b6ab8438fa2b0185b2068a7e8ac055d02da..52bfc5b82ec3ecc1026c7b1dcb1a748e4804e26b 100644 (file)
@@ -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 {