pktgen add net device refcount tracker
authorEric Dumazet <edumazet@google.com>
Tue, 7 Dec 2021 01:30:35 +0000 (17:30 -0800)
committerJakub Kicinski <kuba@kernel.org>
Wed, 8 Dec 2021 04:44:59 +0000 (20:44 -0800)
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/pktgen.c

index a3d74e2704c42e3bec1aa502b911c1b952a56cf1..560a5e712dc32fe4aa2cfaa751c3fe1e462c614f 100644 (file)
@@ -410,6 +410,7 @@ struct pktgen_dev {
                                  * device name (not when the inject is
                                  * started as it used to do.)
                                  */
+       netdevice_tracker dev_tracker;
        char odevname[32];
        struct flow_state *flows;
        unsigned int cflows;    /* Concurrent flows (config) */
@@ -2099,7 +2100,7 @@ static int pktgen_setup_dev(const struct pktgen_net *pn,
 
        /* Clean old setups */
        if (pkt_dev->odev) {
-               dev_put(pkt_dev->odev);
+               dev_put_track(pkt_dev->odev, &pkt_dev->dev_tracker);
                pkt_dev->odev = NULL;
        }
 
@@ -2117,6 +2118,7 @@ static int pktgen_setup_dev(const struct pktgen_net *pn,
                err = -ENETDOWN;
        } else {
                pkt_dev->odev = odev;
+               netdev_tracker_alloc(odev, &pkt_dev->dev_tracker, GFP_KERNEL);
                return 0;
        }
 
@@ -3805,7 +3807,7 @@ static int pktgen_add_device(struct pktgen_thread *t, const char *ifname)
 
        return add_dev_to_thread(t, pkt_dev);
 out2:
-       dev_put(pkt_dev->odev);
+       dev_put_track(pkt_dev->odev, &pkt_dev->dev_tracker);
 out1:
 #ifdef CONFIG_XFRM
        free_SAs(pkt_dev);
@@ -3899,7 +3901,7 @@ static int pktgen_remove_device(struct pktgen_thread *t,
        /* Dis-associate from the interface */
 
        if (pkt_dev->odev) {
-               dev_put(pkt_dev->odev);
+               dev_put_track(pkt_dev->odev, &pkt_dev->dev_tracker);
                pkt_dev->odev = NULL;
        }