On Thu, Feb 13, 2025 at 4:37 PM Xiao Liang [off-list ref] wrote:
On Thu, Feb 13, 2025 at 3:05 PM Kuniyuki Iwashima [off-list ref] wrote:
quoted
[...]
quoted
quoted
diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
index 863852abe8ea..108600dc716f 100644
--- a/net/ipv6/ip6_gre.c
+++ b/net/ipv6/ip6_gre.c
@@ -1498,7 +1498,8 @@ static int ip6gre_tunnel_init_common(struct net_device *dev)
tunnel = netdev_priv(dev);
tunnel->dev = dev;
- tunnel->net = dev_net(dev);
+ if (!tunnel->net)
+ tunnel->net = dev_net(dev);
Same question as patch 5 for here and other parts.
Do we need this check and assignment ?
ip6gre_newlink_common
-> nt->net = dev_net(dev)
-> register_netdevice
-> ndo_init / ip6gre_tunnel_init()
-> ip6gre_tunnel_init_common
-> tunnel->net = dev_net(dev)
Will remove this line.
However, fb tunnel of ip6_tunnel, ip6_vti and sit can have
tunnel->net == NULL here. Take ip6_tunnel for example:
ip6_tnl_init_net()
-> ip6_fb_tnl_dev_init()
-> register_netdev()
-> register_netdevice()
-> ip6_tnl_dev_init()
This code path (including ip6_fb_tnl_dev_init()) doesn't set
tunnel->net. But for ip6_gre, ip6gre_fb_tunnel_init() does.