mlxsw: spectrum_router: IPv6 events: Use tracker helpers to hold & put netdevices
authorPetr Machata <petrm@nvidia.com>
Thu, 27 Jul 2023 15:59:25 +0000 (17:59 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 28 Jul 2023 20:38:46 +0000 (13:38 -0700)
Using the tracking helpers makes it easier to debug netdevice refcount
imbalances when CONFIG_NET_DEV_REFCNT_TRACKER is enabled.

Convert dev_hold() / dev_put() to netdev_hold() / netdev_put() in the
router code that deals with IPv6 address events.

Signed-off-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/r/f0af6ad4722b4ca6e598fd4fda8311a3041651ec.1690471775.git.petrm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c

index 59d12cf..debd2c4 100644 (file)
@@ -9333,6 +9333,7 @@ struct mlxsw_sp_inet6addr_event_work {
        struct work_struct work;
        struct mlxsw_sp *mlxsw_sp;
        struct net_device *dev;
+       netdevice_tracker dev_tracker;
        unsigned long event;
 };
 
@@ -9356,7 +9357,7 @@ static void mlxsw_sp_inet6addr_event_work(struct work_struct *work)
 out:
        mutex_unlock(&mlxsw_sp->router->lock);
        rtnl_unlock();
-       dev_put(dev);
+       netdev_put(dev, &inet6addr_work->dev_tracker);
        kfree(inet6addr_work);
 }
 
@@ -9382,7 +9383,7 @@ static int mlxsw_sp_inet6addr_event(struct notifier_block *nb,
        inet6addr_work->mlxsw_sp = router->mlxsw_sp;
        inet6addr_work->dev = dev;
        inet6addr_work->event = event;
-       dev_hold(dev);
+       netdev_hold(dev, &inet6addr_work->dev_tracker, GFP_ATOMIC);
        mlxsw_core_schedule_work(&inet6addr_work->work);
 
        return NOTIFY_DONE;