diff options
author | Maxime Chevallier <maxime.chevallier@bootlin.com> | 2025-05-02 10:52:41 +0200 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2025-05-05 17:17:41 -0700 |
commit | 63fb100bf5241ffdfa404b49c6a443cadd08447c (patch) | |
tree | f721f4d2687773a369419b9cdf3f8dbbbe09ed7f | |
parent | 9dd2ad5e92b962d1349a7541d167e8e214e49f95 (diff) |
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 <maxime.chevallier@bootlin.com>
Link: https://patch.msgid.link/20250502085242.248645-4-maxime.chevallier@bootlin.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r-- | net/ethtool/netlink.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/ethtool/netlink.c b/net/ethtool/netlink.c index c8ed5a6f1e92..9de828df46cd 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)) |