Series |
net: add preliminary netdev refcount tracking
|
expand
-
[v2,net-next,00/23] net: add preliminary netdev refcount tracking
-
[v2,net-next,01/23] lib: add reference counting tracking infrastructure
-
[v2,net-next,02/23] lib: add tests for reference tracker
-
[v2,net-next,03/23] net: add dev_hold_track() and dev_put_track() helpers
-
[v2,net-next,04/23] net: add net device refcount tracker to struct netdev_rx_queue
-
[v2,net-next,05/23] net: add net device refcount tracker to struct netdev_queue
-
[v2,net-next,06/23] net: add net device refcount tracker to ethtool_phys_id()
-
[v2,net-next,07/23] net: add net device refcount tracker to dev_ifsioc()
-
[v2,net-next,08/23] drop_monitor: add net device refcount tracker
-
[v2,net-next,09/23] net: dst: add net device refcount tracking to dst_entry
-
[v2,net-next,10/23] ipv6: add net device refcount tracker to rt6_probe_deferred()
-
[v2,net-next,11/23] sit: add net device refcount tracking to ip_tunnel
-
[v2,net-next,12/23] ipv6: add net device refcount tracker to struct ip6_tnl
-
[v2,net-next,13/23] net: add net device refcount tracker to struct neighbour
-
[v2,net-next,14/23] net: add net device refcount tracker to struct pneigh_entry
-
[v2,net-next,15/23] net: add net device refcount tracker to struct neigh_parms
-
[v2,net-next,16/23] net: add net device refcount tracker to struct netdev_adjacent
-
[v2,net-next,17/23] ipv6: add net device refcount tracker to struct inet6_dev
-
[v2,net-next,18/23] ipv4: add net device refcount tracker to struct in_device
-
[v2,net-next,19/23] net/sched: add net device refcount tracker to struct Qdisc
-
[v2,net-next,20/23] net: linkwatch: add net device refcount tracker
-
[v2,net-next,21/23] net: failover: add net device refcount tracker
-
[v2,net-next,22/23] ipmr, ip6mr: add net device refcount tracker to struct vif_device
-
[v2,net-next,23/23] netpoll: add net device refcount tracker to struct netpoll
|
From: Eric Dumazet <edumazet@google.com> Two first patches add a generic infrastructure, that will be used to get tracking of refcount increments/decrements. The general idea is to be able to precisely pair each decrement with a corresponding prior increment. Both share a cookie, basically a pointer to private data storing stack traces. The third place adds dev_hold_track() and dev_put_track() helpers (CONFIG_NET_DEV_REFCNT_TRACKER) Then a series of 20 patches converts some dev_hold()/dev_put() pairs to new hepers : dev_hold_track() and dev_put_track(). Hopefully this will be used by developpers and syzbot to root cause bugs that cause netdevice dismantles freezes. With CONFIG_PCPU_DEV_REFCNT=n option, we were able to detect some class of bugs, but too late (when too many dev_put() were happening). v2: added four additional patches, added netdev_tracker_alloc() and netdev_tracker_free() addressed build error (kernel bots), use GFP_ATOMIC in test_ref_tracker_timer_func() Eric Dumazet (23): lib: add reference counting tracking infrastructure lib: add tests for reference tracker net: add dev_hold_track() and dev_put_track() helpers net: add net device refcount tracker to struct netdev_rx_queue net: add net device refcount tracker to struct netdev_queue net: add net device refcount tracker to ethtool_phys_id() net: add net device refcount tracker to dev_ifsioc() drop_monitor: add net device refcount tracker net: dst: add net device refcount tracking to dst_entry ipv6: add net device refcount tracker to rt6_probe_deferred() sit: add net device refcount tracking to ip_tunnel ipv6: add net device refcount tracker to struct ip6_tnl net: add net device refcount tracker to struct neighbour net: add net device refcount tracker to struct pneigh_entry net: add net device refcount tracker to struct neigh_parms net: add net device refcount tracker to struct netdev_adjacent ipv6: add net device refcount tracker to struct inet6_dev ipv4: add net device refcount tracker to struct in_device net/sched: add net device refcount tracker to struct Qdisc net: linkwatch: add net device refcount tracker net: failover: add net device refcount tracker ipmr, ip6mr: add net device refcount tracker to struct vif_device netpoll: add net device refcount tracker to struct netpoll drivers/net/netconsole.c | 2 +- include/linux/inetdevice.h | 2 + include/linux/mroute_base.h | 1 + include/linux/netdevice.h | 66 +++++++++++++++++ include/linux/netpoll.h | 1 + include/linux/ref_tracker.h | 73 +++++++++++++++++++ include/net/devlink.h | 3 + include/net/dst.h | 1 + include/net/failover.h | 1 + include/net/if_inet6.h | 1 + include/net/ip6_tunnel.h | 1 + include/net/ip_tunnels.h | 3 + include/net/neighbour.h | 3 + include/net/sch_generic.h | 2 +- lib/Kconfig | 5 ++ lib/Kconfig.debug | 10 +++ lib/Makefile | 4 +- lib/ref_tracker.c | 140 ++++++++++++++++++++++++++++++++++++ lib/test_ref_tracker.c | 115 +++++++++++++++++++++++++++++ net/Kconfig | 8 +++ net/core/dev.c | 10 ++- net/core/dev_ioctl.c | 5 +- net/core/drop_monitor.c | 6 +- net/core/dst.c | 8 +-- net/core/failover.c | 4 +- net/core/link_watch.c | 4 +- net/core/neighbour.c | 18 ++--- net/core/net-sysfs.c | 8 +-- net/core/netpoll.c | 4 +- net/ethtool/ioctl.c | 5 +- net/ipv4/devinet.c | 4 +- net/ipv4/ipmr.c | 3 +- net/ipv4/route.c | 7 +- net/ipv6/addrconf.c | 4 +- net/ipv6/addrconf_core.c | 2 +- net/ipv6/ip6_gre.c | 8 +-- net/ipv6/ip6_tunnel.c | 4 +- net/ipv6/ip6_vti.c | 4 +- net/ipv6/ip6mr.c | 3 +- net/ipv6/route.c | 10 +-- net/ipv6/sit.c | 4 +- net/sched/sch_generic.c | 4 +- 42 files changed, 509 insertions(+), 62 deletions(-) create mode 100644 include/linux/ref_tracker.h create mode 100644 lib/ref_tracker.c create mode 100644 lib/test_ref_tracker.c