On Wed, May 3, 2017 at 7:43 PM, David Ahern <dsah...@gmail.com> wrote: > On 5/3/17 5:35 PM, Cong Wang wrote: >> Ah, we need: >> >> @@ -4024,7 +4027,7 @@ static struct pernet_operations ip6_route_net_late_ops >> = { >> >> static struct notifier_block ip6_route_dev_notifier = { >> .notifier_call = ip6_route_dev_notify, >> - .priority = 0, >> + .priority = -10, /* Must be called after addrconf_notify!! */ >> }; >> > > > It's not a notifier problem; the null_entry is created in ip6_route_init > which is an init function.
Only init_net's null entry is created here. > > For network namespaces other than init_net, it is never initialized. See > ip6_route_net_init. I don't understand what you are talking about... It is obviously initialized in 3 places: 1) The template itself, as we use memdup() 2) Code around dst_init_metrics() in ip6_route_net_init() 3) ip6_route_dev_notify(), which is supposed to initialize it after loopback registers (the order needs to fix, as shown in my patch) Why not add a printk and play with my patch to see the difference?