net: macvlan: add net device refcount tracker
authorZiyang Xuan <william.xuanziyang@huawei.com>
Fri, 11 Mar 2022 09:04:03 +0000 (17:04 +0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 14 Mar 2022 10:06:54 +0000 (10:06 +0000)
Add net device refcount tracker to macvlan.

Signed-off-by: Ziyang Xuan <william.xuanziyang@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/macvlan.c
include/linux/if_macvlan.h

index b339581..069e882 100644 (file)
@@ -912,7 +912,7 @@ static int macvlan_init(struct net_device *dev)
        port->count += 1;
 
        /* Get macvlan's reference to lowerdev */
-       dev_hold(lowerdev);
+       dev_hold_track(lowerdev, &vlan->dev_tracker, GFP_KERNEL);
 
        return 0;
 }
@@ -1181,7 +1181,7 @@ static void macvlan_dev_free(struct net_device *dev)
        struct macvlan_dev *vlan = netdev_priv(dev);
 
        /* Get rid of the macvlan's reference to lowerdev */
-       dev_put(vlan->lowerdev);
+       dev_put_track(vlan->lowerdev, &vlan->dev_tracker);
 }
 
 void macvlan_common_setup(struct net_device *dev)
index 10c94a3..b422947 100644 (file)
@@ -21,6 +21,7 @@ struct macvlan_dev {
        struct hlist_node       hlist;
        struct macvlan_port     *port;
        struct net_device       *lowerdev;
+       netdevice_tracker       dev_tracker;
        void                    *accel_priv;
        struct vlan_pcpu_stats __percpu *pcpu_stats;