Commit 532b0f7ece4cb2ffd24dc723ddf55242d1188e5e
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
net/tipc/core.c
... | ... | @@ -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(); |