diff options
Diffstat (limited to 'net/tipc/core.c')
-rw-r--r-- | net/tipc/core.c | 113 |
1 files changed, 59 insertions, 54 deletions
diff --git a/net/tipc/core.c b/net/tipc/core.c index c6d3f75a9e1b..80c20647b3d2 100644 --- a/net/tipc/core.c +++ b/net/tipc/core.c | |||
@@ -77,41 +77,13 @@ struct sk_buff *tipc_buf_acquire(u32 size) | |||
77 | } | 77 | } |
78 | 78 | ||
79 | /** | 79 | /** |
80 | * tipc_core_stop_net - shut down TIPC networking sub-systems | ||
81 | */ | ||
82 | static void tipc_core_stop_net(void) | ||
83 | { | ||
84 | tipc_net_stop(); | ||
85 | tipc_eth_media_stop(); | ||
86 | tipc_ib_media_stop(); | ||
87 | } | ||
88 | |||
89 | /** | ||
90 | * start_net - start TIPC networking sub-systems | ||
91 | */ | ||
92 | int tipc_core_start_net(unsigned long addr) | ||
93 | { | ||
94 | int res; | ||
95 | |||
96 | tipc_net_start(addr); | ||
97 | res = tipc_eth_media_start(); | ||
98 | if (res < 0) | ||
99 | goto err; | ||
100 | res = tipc_ib_media_start(); | ||
101 | if (res < 0) | ||
102 | goto err; | ||
103 | return res; | ||
104 | |||
105 | err: | ||
106 | tipc_core_stop_net(); | ||
107 | return res; | ||
108 | } | ||
109 | |||
110 | /** | ||
111 | * tipc_core_stop - switch TIPC from SINGLE NODE to NOT RUNNING mode | 80 | * tipc_core_stop - switch TIPC from SINGLE NODE to NOT RUNNING mode |
112 | */ | 81 | */ |
113 | static void tipc_core_stop(void) | 82 | static void tipc_core_stop(void) |
114 | { | 83 | { |
84 | tipc_handler_stop(); | ||
85 | tipc_net_stop(); | ||
86 | tipc_bearer_cleanup(); | ||
115 | tipc_netlink_stop(); | 87 | tipc_netlink_stop(); |
116 | tipc_cfg_stop(); | 88 | tipc_cfg_stop(); |
117 | tipc_subscr_stop(); | 89 | tipc_subscr_stop(); |
@@ -126,30 +98,65 @@ static void tipc_core_stop(void) | |||
126 | */ | 98 | */ |
127 | static int tipc_core_start(void) | 99 | static int tipc_core_start(void) |
128 | { | 100 | { |
129 | int res; | 101 | int err; |
130 | 102 | ||
131 | get_random_bytes(&tipc_random, sizeof(tipc_random)); | 103 | get_random_bytes(&tipc_random, sizeof(tipc_random)); |
132 | 104 | ||
133 | res = tipc_handler_start(); | 105 | err = tipc_handler_start(); |
134 | if (!res) | 106 | if (err) |
135 | res = tipc_ref_table_init(tipc_max_ports, tipc_random); | 107 | goto out_handler; |
136 | if (!res) | 108 | |
137 | res = tipc_nametbl_init(); | 109 | err = tipc_ref_table_init(tipc_max_ports, tipc_random); |
138 | if (!res) | 110 | if (err) |
139 | res = tipc_netlink_start(); | 111 | goto out_reftbl; |
140 | if (!res) | 112 | |
141 | res = tipc_socket_init(); | 113 | err = tipc_nametbl_init(); |
142 | if (!res) | 114 | if (err) |
143 | res = tipc_register_sysctl(); | 115 | goto out_nametbl; |
144 | if (!res) | 116 | |
145 | res = tipc_subscr_start(); | 117 | err = tipc_netlink_start(); |
146 | if (!res) | 118 | if (err) |
147 | res = tipc_cfg_init(); | 119 | goto out_netlink; |
148 | if (res) { | 120 | |
149 | tipc_handler_stop(); | 121 | err = tipc_socket_init(); |
150 | tipc_core_stop(); | 122 | if (err) |
151 | } | 123 | goto out_socket; |
152 | return res; | 124 | |
125 | err = tipc_register_sysctl(); | ||
126 | if (err) | ||
127 | goto out_sysctl; | ||
128 | |||
129 | err = tipc_subscr_start(); | ||
130 | if (err) | ||
131 | goto out_subscr; | ||
132 | |||
133 | err = tipc_cfg_init(); | ||
134 | if (err) | ||
135 | goto out_cfg; | ||
136 | |||
137 | err = tipc_bearer_setup(); | ||
138 | if (err) | ||
139 | goto out_bearer; | ||
140 | |||
141 | return 0; | ||
142 | out_bearer: | ||
143 | tipc_cfg_stop(); | ||
144 | out_cfg: | ||
145 | tipc_subscr_stop(); | ||
146 | out_subscr: | ||
147 | tipc_unregister_sysctl(); | ||
148 | out_sysctl: | ||
149 | tipc_socket_stop(); | ||
150 | out_socket: | ||
151 | tipc_netlink_stop(); | ||
152 | out_netlink: | ||
153 | tipc_nametbl_stop(); | ||
154 | out_nametbl: | ||
155 | tipc_ref_table_stop(); | ||
156 | out_reftbl: | ||
157 | tipc_handler_stop(); | ||
158 | out_handler: | ||
159 | return err; | ||
153 | } | 160 | } |
154 | 161 | ||
155 | static int __init tipc_init(void) | 162 | static int __init tipc_init(void) |
@@ -178,8 +185,6 @@ static int __init tipc_init(void) | |||
178 | 185 | ||
179 | static void __exit tipc_exit(void) | 186 | static void __exit tipc_exit(void) |
180 | { | 187 | { |
181 | tipc_handler_stop(); | ||
182 | tipc_core_stop_net(); | ||
183 | tipc_core_stop(); | 188 | tipc_core_stop(); |
184 | pr_info("Deactivated\n"); | 189 | pr_info("Deactivated\n"); |
185 | } | 190 | } |