]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: ethtool: netlink: Use netdev_hold for dumpit() operations
authorMaxime Chevallier <maxime.chevallier@bootlin.com>
Fri, 2 May 2025 08:52:41 +0000 (10:52 +0200)
committerJakub Kicinski <kuba@kernel.org>
Tue, 6 May 2025 00:17:41 +0000 (17:17 -0700)
Move away from dev_hold and use netdev_hold with a local reftracker when
performing a DUMP on each netdev.

Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Link: https://patch.msgid.link/20250502085242.248645-4-maxime.chevallier@bootlin.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ethtool/netlink.c

index c8ed5a6f1e92144f275e062739b3ad865dbc4666..9de828df46cd3728d9bae283e98b348cdd28cbc1 100644 (file)
@@ -603,18 +603,19 @@ static int ethnl_default_dumpit(struct sk_buff *skb,
 {
        struct ethnl_dump_ctx *ctx = ethnl_dump_context(cb);
        struct net *net = sock_net(skb->sk);
+       netdevice_tracker dev_tracker;
        struct net_device *dev;
        int ret = 0;
 
        rcu_read_lock();
        for_each_netdev_dump(net, dev, ctx->pos_ifindex) {
-               dev_hold(dev);
+               netdev_hold(dev, &dev_tracker, GFP_ATOMIC);
                rcu_read_unlock();
 
                ret = ethnl_default_dump_one(skb, dev, ctx, genl_info_dump(cb));
 
                rcu_read_lock();
-               dev_put(dev);
+               netdev_put(dev, &dev_tracker);
 
                if (ret < 0 && ret != -EOPNOTSUPP) {
                        if (likely(skb->len))