static int __init ip6table_nat_init(void)
 {
-       int ret = xt_register_template(&nf_nat_ipv6_table,
-                                      ip6table_nat_table_init);
+       int ret;
 
+       /* net->gen->ptr[ip6table_nat_net_id] must be allocated
+        * before calling ip6t_nat_register_lookups().
+        */
+       ret = register_pernet_subsys(&ip6table_nat_net_ops);
        if (ret < 0)
                return ret;
 
-       ret = register_pernet_subsys(&ip6table_nat_net_ops);
+       ret = xt_register_template(&nf_nat_ipv6_table,
+                                  ip6table_nat_table_init);
        if (ret)
-               xt_unregister_template(&nf_nat_ipv6_table);
+               unregister_pernet_subsys(&ip6table_nat_net_ops);
 
        return ret;
 }
 
 static void __exit ip6table_nat_exit(void)
 {
-       unregister_pernet_subsys(&ip6table_nat_net_ops);
        xt_unregister_template(&nf_nat_ipv6_table);
+       unregister_pernet_subsys(&ip6table_nat_net_ops);
 }
 
 module_init(ip6table_nat_init);