summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2021-12-05 07:21:57 +0300
committerJakub Kicinski <kuba@kernel.org>2021-12-07 03:05:07 +0300
commit4d92b95ff2f95f13df9bad0b5a25a9f60e72758d (patch)
tree0e0fa4c1662c49b683170ed02da58ab253da23d7 /lib
parent914a7b5000d08f1487e0efa52f27c4b7ea75b893 (diff)
downloadlinux-4d92b95ff2f95f13df9bad0b5a25a9f60e72758d.tar.xz
net: add net device refcount tracker infrastructure
net device are refcounted. Over the years we had numerous bugs caused by imbalanced dev_hold() and dev_put() calls. 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. This patch adds dev_hold_track() and dev_put_track(). To use these helpers, each data structure owning a refcount should also use a "netdevice_tracker" to pair the hold and put. netdevice_tracker dev_tracker; ... dev_hold_track(dev, &dev_tracker, GFP_ATOMIC); ... dev_put_track(dev, &dev_tracker); Whenever a leak happens, we will get precise stack traces of the point dev_hold_track() happened, at device dismantle phase. We will also get a stack trace if too many dev_put_track() for the same netdevice_tracker are attempted. This is guarded by CONFIG_NET_DEV_REFCNT_TRACKER option. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/Kconfig.debug5
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 633c2c5cb45b..6504b97f8dfd 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -598,6 +598,11 @@ config DEBUG_MISC
Say Y here if you need to enable miscellaneous debug code that should
be under a more specific debug option but isn't.
+menu "Networking Debugging"
+
+source "net/Kconfig.debug"
+
+endmenu # "Networking Debugging"
menu "Memory Debugging"