aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/netdevice.h
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2021-12-04 20:22:03 -0800
committerJakub Kicinski <kuba@kernel.org>2021-12-06 16:05:10 -0800
commit9038c320001dd07f60736018edf608ac5baca0ab (patch)
treefea21a92f9a586370c4c85a5aab4adca4c160e7f /include/linux/netdevice.h
parentdrop_monitor: add net device refcount tracker (diff)
downloadlinux-dev-9038c320001dd07f60736018edf608ac5baca0ab.tar.xz
linux-dev-9038c320001dd07f60736018edf608ac5baca0ab.zip
net: dst: add net device refcount tracking to dst_entry
We want to track all dev_hold()/dev_put() to ease leak hunting. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'include/linux/netdevice.h')
-rw-r--r--include/linux/netdevice.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index b4f704337f65..afed3b10491b 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -3883,6 +3883,23 @@ static inline void dev_put_track(struct net_device *dev,
}
}
+static inline void dev_replace_track(struct net_device *odev,
+ struct net_device *ndev,
+ netdevice_tracker *tracker,
+ gfp_t gfp)
+{
+#ifdef CONFIG_NET_DEV_REFCNT_TRACKER
+ if (odev)
+ ref_tracker_free(&odev->refcnt_tracker, tracker);
+#endif
+ dev_hold(ndev);
+ dev_put(odev);
+#ifdef CONFIG_NET_DEV_REFCNT_TRACKER
+ if (ndev)
+ ref_tracker_alloc(&ndev->refcnt_tracker, tracker, gfp);
+#endif
+}
+
/* Carrier loss detection, dial on demand. The functions netif_carrier_on
* and _off may be called from IRQ context, but it is caller
* who is responsible for serialization of these calls.