diff options
author | David S. Miller <davem@davemloft.net> | 2023-06-15 08:21:12 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2023-06-15 08:21:12 +0100 |
commit | 473f5e13b38b9533bd3ae0758418581eabf69b50 (patch) | |
tree | 498f35c9dae873ea7cba0949b2dc350e3b8d189a /net/core/netpoll.c | |
parent | 89da780aa4c7667c8b1a144959206262aebdeabe (diff) | |
parent | 48eed027d310326052655c5ac14588855663087b (diff) |
Merge branch 'netdev-tracking'
Jakub Kicinski says:
====================
net: create device lookup API with reference tracking
We still see dev_hold() / dev_put() calls without reference tracker
getting added in new code. dev_get_by_name() / dev_get_by_index()
seem to be one of the sources of those. Provide appropriate helpers.
Allocating the tracker can obviously be done with an additional call
to netdev_tracker_alloc(), but a single API feels cleaner.
v2:
- fix a dev_put() in ethtool
v1: https://lore.kernel.org/all/20230609183207.1466075-1-kuba@kernel.org/
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/netpoll.c')
-rw-r--r-- | net/core/netpoll.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index e6a739b1afa9e..543007f159f99 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -690,7 +690,7 @@ int netpoll_setup(struct netpoll *np) err = -ENODEV; goto unlock; } - dev_hold(ndev); + netdev_hold(ndev, &np->dev_tracker, GFP_KERNEL); if (netdev_master_upper_dev_get(ndev)) { np_err(np, "%s is a slave device, aborting\n", np->dev_name); @@ -783,12 +783,11 @@ put_noaddr: err = __netpoll_setup(np, ndev); if (err) goto put; - netdev_tracker_alloc(ndev, &np->dev_tracker, GFP_KERNEL); rtnl_unlock(); return 0; put: - dev_put(ndev); + netdev_put(ndev, &np->dev_tracker); unlock: rtnl_unlock(); return err; |