Commit 532b0f7ece4cb2ffd24dc723ddf55242d1188e5e

Authored by Junwei Hu
Committed by David S. Miller
1 parent 38a04b83ab

tipc: fix modprobe tipc failed after switch order of device registration

Error message printed:
modprobe: ERROR: could not insert 'tipc': Address family not
supported by protocol.
when modprobe tipc after the following patch: switch order of
device registration, commit 7e27e8d6130c
("tipc: switch order of device registration to fix a crash")

Because sock_create_kern(net, AF_TIPC, ...) is called by
tipc_topsrv_create_listener() in the initialization process
of tipc_net_ops, tipc_socket_init() must be execute before that.

I move tipc_socket_init() into function tipc_init_net().

Fixes: 7e27e8d6130c
("tipc: switch order of device registration to fix a crash")
Signed-off-by: Junwei Hu <hujunwei4@huawei.com>
Reported-by: Wang Wang <wangwang2@huawei.com>
Reviewed-by: Kang Zhou <zhoukang7@huawei.com>
Reviewed-by: Suanming Mou <mousuanming@huawei.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 1 changed file with 7 additions and 7 deletions Side-by-side Diff

... ... @@ -68,6 +68,10 @@
68 68 INIT_LIST_HEAD(&tn->node_list);
69 69 spin_lock_init(&tn->node_list_lock);
70 70  
  71 + err = tipc_socket_init();
  72 + if (err)
  73 + goto out_socket;
  74 +
71 75 err = tipc_sk_rht_init(net);
72 76 if (err)
73 77 goto out_sk_rht;
... ... @@ -94,6 +98,8 @@
94 98 out_nametbl:
95 99 tipc_sk_rht_destroy(net);
96 100 out_sk_rht:
  101 + tipc_socket_stop();
  102 +out_socket:
97 103 return err;
98 104 }
99 105  
... ... @@ -104,6 +110,7 @@
104 110 tipc_bcast_stop(net);
105 111 tipc_nametbl_stop(net);
106 112 tipc_sk_rht_destroy(net);
  113 + tipc_socket_stop();
107 114 }
108 115  
109 116 static struct pernet_operations tipc_net_ops = {
... ... @@ -139,10 +146,6 @@
139 146 if (err)
140 147 goto out_pernet;
141 148  
142   - err = tipc_socket_init();
143   - if (err)
144   - goto out_socket;
145   -
146 149 err = tipc_bearer_setup();
147 150 if (err)
148 151 goto out_bearer;
... ... @@ -150,8 +153,6 @@
150 153 pr_info("Started in single node mode\n");
151 154 return 0;
152 155 out_bearer:
153   - tipc_socket_stop();
154   -out_socket:
155 156 unregister_pernet_subsys(&tipc_net_ops);
156 157 out_pernet:
157 158 tipc_unregister_sysctl();
... ... @@ -167,7 +168,6 @@
167 168 static void __exit tipc_exit(void)
168 169 {
169 170 tipc_bearer_cleanup();
170   - tipc_socket_stop();
171 171 unregister_pernet_subsys(&tipc_net_ops);
172 172 tipc_netlink_stop();
173 173 tipc_netlink_compat_stop();