OSDN Git Service

xfrm: Register xfrm_dev_notifier in appropriate place
authorKirill Tkhai <ktkhai@virtuozzo.com>
Thu, 29 Mar 2018 14:03:25 +0000 (17:03 +0300)
committerDavid S. Miller <davem@davemloft.net>
Fri, 30 Mar 2018 14:59:23 +0000 (10:59 -0400)
Currently, driver registers it from pernet_operations::init method,
and this breaks modularity, because initialization of net namespace
and netdevice notifiers are orthogonal actions. We don't have
per-namespace netdevice notifiers; all of them are global for all
devices in all namespaces.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/xfrm.h
net/xfrm/xfrm_device.c
net/xfrm/xfrm_policy.c

index aa027ba..a872379 100644 (file)
@@ -1894,7 +1894,7 @@ static inline struct xfrm_offload *xfrm_offload(struct sk_buff *skb)
 #endif
 }
 
-void __net_init xfrm_dev_init(void);
+void __init xfrm_dev_init(void);
 
 #ifdef CONFIG_XFRM_OFFLOAD
 void xfrm_dev_resume(struct sk_buff *skb);
index e87d6c4..175941e 100644 (file)
@@ -350,7 +350,7 @@ static struct notifier_block xfrm_dev_notifier = {
        .notifier_call  = xfrm_dev_event,
 };
 
-void __net_init xfrm_dev_init(void)
+void __init xfrm_dev_init(void)
 {
        register_netdevice_notifier(&xfrm_dev_notifier);
 }
index 0e065db..40b54cc 100644 (file)
@@ -2895,8 +2895,6 @@ static int __net_init xfrm_policy_init(struct net *net)
        INIT_LIST_HEAD(&net->xfrm.policy_all);
        INIT_WORK(&net->xfrm.policy_hash_work, xfrm_hash_resize);
        INIT_WORK(&net->xfrm.policy_hthresh.work, xfrm_hash_rebuild);
-       if (net_eq(net, &init_net))
-               xfrm_dev_init();
        return 0;
 
 out_bydst:
@@ -2999,6 +2997,7 @@ void __init xfrm_init(void)
                INIT_WORK(&xfrm_pcpu_work[i], xfrm_pcpu_work_fn);
 
        register_pernet_subsys(&xfrm_net_ops);
+       xfrm_dev_init();
        seqcount_init(&xfrm_policy_hash_generation);
        xfrm_input_init();
 }