diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 48dd6dc603c9..42ee7fce3d95 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -1314,19 +1314,19 @@ static void __unregister_pernet_operations(struct pernet_operations *ops) static int __register_pernet_operations(struct list_head *list, struct pernet_operations *ops) { - list_add_tail(&ops->list, list); - - if (!init_net_initialized) + if (!init_net_initialized) { + list_add_tail(&ops->list, list); return 0; + } return ops_init(ops, &init_net); } static void __unregister_pernet_operations(struct pernet_operations *ops) { - list_del(&ops->list); - - if (init_net_initialized) { + if (!init_net_initialized) { + list_del(&ops->list); + } else { LIST_HEAD(net_exit_list); list_add(&init_net.exit_list, &net_exit_list);