mbox series

[net-next,0/7] mlxsw: Avoid non-tracker helpers when holding and putting netdevices

Message ID cover.1690471774.git.petrm@nvidia.com (mailing list archive)
Headers show
Series mlxsw: Avoid non-tracker helpers when holding and putting netdevices | expand

Message

Petr Machata July 27, 2023, 3:59 p.m. UTC
Using the tracking helpers, netdev_hold() and netdev_put(), makes it easier
to debug netdevice refcount imbalances when CONFIG_NET_DEV_REFCNT_TRACKER
is enabled. For example, the following traceback shows the callpath to the
point of an outstanding hold that was never put:

    unregister_netdevice: waiting for swp3 to become free. Usage count = 6
    ref_tracker: eth%d@ffff888123c9a580 has 1/5 users at
	mlxsw_sp_switchdev_event+0x6bd/0xcc0 [mlxsw_spectrum]
	notifier_call_chain+0xbf/0x3b0
	atomic_notifier_call_chain+0x78/0x200
	br_switchdev_fdb_notify+0x25f/0x2c0 [bridge]
	fdb_notify+0x16a/0x1a0 [bridge]
	[...]

In this patchset, get rid of all non-ref-tracking helpers in mlxsw.

- Patch #1 drops two functions that are not used anymore, but contain
  dev_hold() / dev_put() calls.

- Patch #2 avoids taking a reference in one function which is called
  under RTNL.

- The remaining patches convert individual hold/put sites one by one
  from trackerless to tracker-enabled.

Suggested-by: Paolo Abeni <pabeni@redhat.com>
Link: https://lore.kernel.org/netdev/4c056da27c19d95ffeaba5acf1427ecadfc3f94c.camel@redhat.com/

Petr Machata (7):
  mlxsw: spectrum: Drop unused functions
    mlxsw_sp_port_lower_dev_hold/_put()
  mlxsw: spectrum_nve: Do not take reference when looking up netdevice
  mlxsw: spectrum_switchdev: Use tracker helpers to hold & put
    netdevices
  mlxsw: spectrum_router: FIB: Use tracker helpers to hold & put
    netdevices
  mlxsw: spectrum_router: hw_stats: Use tracker helpers to hold & put
    netdevices
  mlxsw: spectrum_router: RIF: Use tracker helpers to hold & put
    netdevices
  mlxsw: spectrum_router: IPv6 events: Use tracker helpers to hold & put
    netdevices

 .../net/ethernet/mellanox/mlxsw/spectrum.c    | 17 -------------
 .../net/ethernet/mellanox/mlxsw/spectrum.h    |  2 --
 .../ethernet/mellanox/mlxsw/spectrum_nve.c    |  7 +++---
 .../ethernet/mellanox/mlxsw/spectrum_router.c | 25 +++++++++++--------
 .../mellanox/mlxsw/spectrum_switchdev.c       |  9 ++++---
 5 files changed, 24 insertions(+), 36 deletions(-)

Comments

Eric Dumazet July 27, 2023, 5:02 p.m. UTC | #1
On Thu, Jul 27, 2023 at 6:00 PM Petr Machata <petrm@nvidia.com> wrote:
>
> Using the tracking helpers, netdev_hold() and netdev_put(), makes it easier
> to debug netdevice refcount imbalances when CONFIG_NET_DEV_REFCNT_TRACKER
> is enabled. For example, the following traceback shows the callpath to the
> point of an outstanding hold that was never put:
>
>     unregister_netdevice: waiting for swp3 to become free. Usage count = 6
>     ref_tracker: eth%d@ffff888123c9a580 has 1/5 users at
>         mlxsw_sp_switchdev_event+0x6bd/0xcc0 [mlxsw_spectrum]
>         notifier_call_chain+0xbf/0x3b0
>         atomic_notifier_call_chain+0x78/0x200
>         br_switchdev_fdb_notify+0x25f/0x2c0 [bridge]
>         fdb_notify+0x16a/0x1a0 [bridge]
>         [...]
>
> In this patchset, get rid of all non-ref-tracking helpers in mlxsw.

For the series :

Reviewed-by: Eric Dumazet <edumazet@google.com>
patchwork-bot+netdevbpf@kernel.org July 28, 2023, 8:50 p.m. UTC | #2
Hello:

This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Thu, 27 Jul 2023 17:59:18 +0200 you wrote:
> Using the tracking helpers, netdev_hold() and netdev_put(), makes it easier
> to debug netdevice refcount imbalances when CONFIG_NET_DEV_REFCNT_TRACKER
> is enabled. For example, the following traceback shows the callpath to the
> point of an outstanding hold that was never put:
> 
>     unregister_netdevice: waiting for swp3 to become free. Usage count = 6
>     ref_tracker: eth%d@ffff888123c9a580 has 1/5 users at
> 	mlxsw_sp_switchdev_event+0x6bd/0xcc0 [mlxsw_spectrum]
> 	notifier_call_chain+0xbf/0x3b0
> 	atomic_notifier_call_chain+0x78/0x200
> 	br_switchdev_fdb_notify+0x25f/0x2c0 [bridge]
> 	fdb_notify+0x16a/0x1a0 [bridge]
> 	[...]
> 
> [...]

Here is the summary with links:
  - [net-next,1/7] mlxsw: spectrum: Drop unused functions mlxsw_sp_port_lower_dev_hold/_put()
    https://git.kernel.org/netdev/net-next/c/569f98b36b38
  - [net-next,2/7] mlxsw: spectrum_nve: Do not take reference when looking up netdevice
    https://git.kernel.org/netdev/net-next/c/16f8c846cd6f
  - [net-next,3/7] mlxsw: spectrum_switchdev: Use tracker helpers to hold & put netdevices
    https://git.kernel.org/netdev/net-next/c/1ae489ab43e0
  - [net-next,4/7] mlxsw: spectrum_router: FIB: Use tracker helpers to hold & put netdevices
    https://git.kernel.org/netdev/net-next/c/deeaa3716f4f
  - [net-next,5/7] mlxsw: spectrum_router: hw_stats: Use tracker helpers to hold & put netdevices
    https://git.kernel.org/netdev/net-next/c/b17b2d57b7c1
  - [net-next,6/7] mlxsw: spectrum_router: RIF: Use tracker helpers to hold & put netdevices
    https://git.kernel.org/netdev/net-next/c/d0e0e880122f
  - [net-next,7/7] mlxsw: spectrum_router: IPv6 events: Use tracker helpers to hold & put netdevices
    https://git.kernel.org/netdev/net-next/c/cb2116204169

You are awesome, thank you!