sit: add net device refcount tracking to ip_tunnel
Note that other ip_tunnel users do not seem to hold a reference on tunnel->dev. Probably needs some investigations. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
fb67510ba9
commit
c0fd407a06
|
@ -104,7 +104,10 @@ struct metadata_dst;
|
|||
struct ip_tunnel {
|
||||
struct ip_tunnel __rcu *next;
|
||||
struct hlist_node hash_node;
|
||||
|
||||
struct net_device *dev;
|
||||
netdevice_tracker dev_tracker;
|
||||
|
||||
struct net *net; /* netns for packet i/o */
|
||||
|
||||
unsigned long err_time; /* Time when the last ICMP error
|
||||
|
|
|
@ -521,7 +521,7 @@ static void ipip6_tunnel_uninit(struct net_device *dev)
|
|||
ipip6_tunnel_del_prl(tunnel, NULL);
|
||||
}
|
||||
dst_cache_reset(&tunnel->dst_cache);
|
||||
dev_put(dev);
|
||||
dev_put_track(dev, &tunnel->dev_tracker);
|
||||
}
|
||||
|
||||
static int ipip6_err(struct sk_buff *skb, u32 info)
|
||||
|
@ -1463,7 +1463,7 @@ static int ipip6_tunnel_init(struct net_device *dev)
|
|||
dev->tstats = NULL;
|
||||
return err;
|
||||
}
|
||||
dev_hold(dev);
|
||||
dev_hold_track(dev, &tunnel->dev_tracker, GFP_KERNEL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue