From: Maxime Chevallier Date: Fri, 2 May 2025 08:52:41 +0000 (+0200) Subject: net: ethtool: netlink: Use netdev_hold for dumpit() operations X-Git-Tag: v6.16-rc1~132^2~167^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=63fb100bf5241ffdfa404b49c6a443cadd08447c;p=thirdparty%2Flinux.git net: ethtool: netlink: Use netdev_hold for dumpit() operations 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 Link: https://patch.msgid.link/20250502085242.248645-4-maxime.chevallier@bootlin.com Signed-off-by: Jakub Kicinski --- diff --git a/net/ethtool/netlink.c b/net/ethtool/netlink.c index c8ed5a6f1e921..9de828df46cd3 100644 --- a/net/ethtool/netlink.c +++ b/net/ethtool/netlink.c @@ -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))