提交 19c9ebf6 编写于 作者: E Eric Dumazet 提交者: Jakub Kicinski

vlan: add net device refcount tracker

Signed-off-by: NEric Dumazet <edumazet@google.com>
Signed-off-by: NJakub Kicinski <kuba@kernel.org>
上级 08f0b22d
...@@ -162,6 +162,7 @@ struct netpoll; ...@@ -162,6 +162,7 @@ struct netpoll;
* @vlan_id: VLAN identifier * @vlan_id: VLAN identifier
* @flags: device flags * @flags: device flags
* @real_dev: underlying netdevice * @real_dev: underlying netdevice
* @dev_tracker: refcount tracker for @real_dev reference
* @real_dev_addr: address of underlying netdevice * @real_dev_addr: address of underlying netdevice
* @dent: proc dir entry * @dent: proc dir entry
* @vlan_pcpu_stats: ptr to percpu rx stats * @vlan_pcpu_stats: ptr to percpu rx stats
...@@ -177,6 +178,8 @@ struct vlan_dev_priv { ...@@ -177,6 +178,8 @@ struct vlan_dev_priv {
u16 flags; u16 flags;
struct net_device *real_dev; struct net_device *real_dev;
netdevice_tracker dev_tracker;
unsigned char real_dev_addr[ETH_ALEN]; unsigned char real_dev_addr[ETH_ALEN];
struct proc_dir_entry *dent; struct proc_dir_entry *dent;
......
...@@ -616,7 +616,7 @@ static int vlan_dev_init(struct net_device *dev) ...@@ -616,7 +616,7 @@ static int vlan_dev_init(struct net_device *dev)
return -ENOMEM; return -ENOMEM;
/* Get vlan's reference to real_dev */ /* Get vlan's reference to real_dev */
dev_hold(real_dev); dev_hold_track(real_dev, &vlan->dev_tracker, GFP_KERNEL);
return 0; return 0;
} }
...@@ -848,7 +848,7 @@ static void vlan_dev_free(struct net_device *dev) ...@@ -848,7 +848,7 @@ static void vlan_dev_free(struct net_device *dev)
vlan->vlan_pcpu_stats = NULL; vlan->vlan_pcpu_stats = NULL;
/* Get rid of the vlan's reference to real_dev */ /* Get rid of the vlan's reference to real_dev */
dev_put(vlan->real_dev); dev_put_track(vlan->real_dev, &vlan->dev_tracker);
} }
void vlan_setup(struct net_device *dev) void vlan_setup(struct net_device *dev)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册