diff options
Diffstat (limited to 'net/tipc/subscr.c')
-rw-r--r-- | net/tipc/subscr.c | 43 |
1 files changed, 0 insertions, 43 deletions
diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c index af93ea924f60..f976e9cd6a72 100644 --- a/net/tipc/subscr.c +++ b/net/tipc/subscr.c | |||
@@ -46,7 +46,6 @@ | |||
46 | * @subscriber_list: adjacent subscribers in top. server's list of subscribers | 46 | * @subscriber_list: adjacent subscribers in top. server's list of subscribers |
47 | * @subscription_list: list of subscription objects for this subscriber | 47 | * @subscription_list: list of subscription objects for this subscriber |
48 | */ | 48 | */ |
49 | |||
50 | struct tipc_subscriber { | 49 | struct tipc_subscriber { |
51 | u32 port_ref; | 50 | u32 port_ref; |
52 | spinlock_t *lock; | 51 | spinlock_t *lock; |
@@ -61,7 +60,6 @@ struct tipc_subscriber { | |||
61 | * @subscriber_list: list of ports subscribing to service | 60 | * @subscriber_list: list of ports subscribing to service |
62 | * @lock: spinlock govering access to subscriber list | 61 | * @lock: spinlock govering access to subscriber list |
63 | */ | 62 | */ |
64 | |||
65 | struct top_srv { | 63 | struct top_srv { |
66 | u32 setup_port; | 64 | u32 setup_port; |
67 | atomic_t subscription_count; | 65 | atomic_t subscription_count; |
@@ -78,7 +76,6 @@ static struct top_srv topsrv; | |||
78 | * | 76 | * |
79 | * Returns converted value | 77 | * Returns converted value |
80 | */ | 78 | */ |
81 | |||
82 | static u32 htohl(u32 in, int swap) | 79 | static u32 htohl(u32 in, int swap) |
83 | { | 80 | { |
84 | return swap ? swab32(in) : in; | 81 | return swap ? swab32(in) : in; |
@@ -90,7 +87,6 @@ static u32 htohl(u32 in, int swap) | |||
90 | * Note: Must not hold subscriber's server port lock, since tipc_send() will | 87 | * Note: Must not hold subscriber's server port lock, since tipc_send() will |
91 | * try to take the lock if the message is rejected and returned! | 88 | * try to take the lock if the message is rejected and returned! |
92 | */ | 89 | */ |
93 | |||
94 | static void subscr_send_event(struct tipc_subscription *sub, | 90 | static void subscr_send_event(struct tipc_subscription *sub, |
95 | u32 found_lower, | 91 | u32 found_lower, |
96 | u32 found_upper, | 92 | u32 found_upper, |
@@ -116,7 +112,6 @@ static void subscr_send_event(struct tipc_subscription *sub, | |||
116 | * | 112 | * |
117 | * Returns 1 if there is overlap, otherwise 0. | 113 | * Returns 1 if there is overlap, otherwise 0. |
118 | */ | 114 | */ |
119 | |||
120 | int tipc_subscr_overlap(struct tipc_subscription *sub, | 115 | int tipc_subscr_overlap(struct tipc_subscription *sub, |
121 | u32 found_lower, | 116 | u32 found_lower, |
122 | u32 found_upper) | 117 | u32 found_upper) |
@@ -136,7 +131,6 @@ int tipc_subscr_overlap(struct tipc_subscription *sub, | |||
136 | * | 131 | * |
137 | * Protected by nameseq.lock in name_table.c | 132 | * Protected by nameseq.lock in name_table.c |
138 | */ | 133 | */ |
139 | |||
140 | void tipc_subscr_report_overlap(struct tipc_subscription *sub, | 134 | void tipc_subscr_report_overlap(struct tipc_subscription *sub, |
141 | u32 found_lower, | 135 | u32 found_lower, |
142 | u32 found_upper, | 136 | u32 found_upper, |
@@ -156,43 +150,35 @@ void tipc_subscr_report_overlap(struct tipc_subscription *sub, | |||
156 | /** | 150 | /** |
157 | * subscr_timeout - subscription timeout has occurred | 151 | * subscr_timeout - subscription timeout has occurred |
158 | */ | 152 | */ |
159 | |||
160 | static void subscr_timeout(struct tipc_subscription *sub) | 153 | static void subscr_timeout(struct tipc_subscription *sub) |
161 | { | 154 | { |
162 | struct tipc_port *server_port; | 155 | struct tipc_port *server_port; |
163 | 156 | ||
164 | /* Validate server port reference (in case subscriber is terminating) */ | 157 | /* Validate server port reference (in case subscriber is terminating) */ |
165 | |||
166 | server_port = tipc_port_lock(sub->server_ref); | 158 | server_port = tipc_port_lock(sub->server_ref); |
167 | if (server_port == NULL) | 159 | if (server_port == NULL) |
168 | return; | 160 | return; |
169 | 161 | ||
170 | /* Validate timeout (in case subscription is being cancelled) */ | 162 | /* Validate timeout (in case subscription is being cancelled) */ |
171 | |||
172 | if (sub->timeout == TIPC_WAIT_FOREVER) { | 163 | if (sub->timeout == TIPC_WAIT_FOREVER) { |
173 | tipc_port_unlock(server_port); | 164 | tipc_port_unlock(server_port); |
174 | return; | 165 | return; |
175 | } | 166 | } |
176 | 167 | ||
177 | /* Unlink subscription from name table */ | 168 | /* Unlink subscription from name table */ |
178 | |||
179 | tipc_nametbl_unsubscribe(sub); | 169 | tipc_nametbl_unsubscribe(sub); |
180 | 170 | ||
181 | /* Unlink subscription from subscriber */ | 171 | /* Unlink subscription from subscriber */ |
182 | |||
183 | list_del(&sub->subscription_list); | 172 | list_del(&sub->subscription_list); |
184 | 173 | ||
185 | /* Release subscriber's server port */ | 174 | /* Release subscriber's server port */ |
186 | |||
187 | tipc_port_unlock(server_port); | 175 | tipc_port_unlock(server_port); |
188 | 176 | ||
189 | /* Notify subscriber of timeout */ | 177 | /* Notify subscriber of timeout */ |
190 | |||
191 | subscr_send_event(sub, sub->evt.s.seq.lower, sub->evt.s.seq.upper, | 178 | subscr_send_event(sub, sub->evt.s.seq.lower, sub->evt.s.seq.upper, |
192 | TIPC_SUBSCR_TIMEOUT, 0, 0); | 179 | TIPC_SUBSCR_TIMEOUT, 0, 0); |
193 | 180 | ||
194 | /* Now destroy subscription */ | 181 | /* Now destroy subscription */ |
195 | |||
196 | k_term_timer(&sub->timer); | 182 | k_term_timer(&sub->timer); |
197 | kfree(sub); | 183 | kfree(sub); |
198 | atomic_dec(&topsrv.subscription_count); | 184 | atomic_dec(&topsrv.subscription_count); |
@@ -203,7 +189,6 @@ static void subscr_timeout(struct tipc_subscription *sub) | |||
203 | * | 189 | * |
204 | * Called with subscriber port locked. | 190 | * Called with subscriber port locked. |
205 | */ | 191 | */ |
206 | |||
207 | static void subscr_del(struct tipc_subscription *sub) | 192 | static void subscr_del(struct tipc_subscription *sub) |
208 | { | 193 | { |
209 | tipc_nametbl_unsubscribe(sub); | 194 | tipc_nametbl_unsubscribe(sub); |
@@ -222,7 +207,6 @@ static void subscr_del(struct tipc_subscription *sub) | |||
222 | * a new object reference in the interim that uses this lock; this routine will | 207 | * a new object reference in the interim that uses this lock; this routine will |
223 | * simply wait for it to be released, then claim it.) | 208 | * simply wait for it to be released, then claim it.) |
224 | */ | 209 | */ |
225 | |||
226 | static void subscr_terminate(struct tipc_subscriber *subscriber) | 210 | static void subscr_terminate(struct tipc_subscriber *subscriber) |
227 | { | 211 | { |
228 | u32 port_ref; | 212 | u32 port_ref; |
@@ -230,18 +214,15 @@ static void subscr_terminate(struct tipc_subscriber *subscriber) | |||
230 | struct tipc_subscription *sub_temp; | 214 | struct tipc_subscription *sub_temp; |
231 | 215 | ||
232 | /* Invalidate subscriber reference */ | 216 | /* Invalidate subscriber reference */ |
233 | |||
234 | port_ref = subscriber->port_ref; | 217 | port_ref = subscriber->port_ref; |
235 | subscriber->port_ref = 0; | 218 | subscriber->port_ref = 0; |
236 | spin_unlock_bh(subscriber->lock); | 219 | spin_unlock_bh(subscriber->lock); |
237 | 220 | ||
238 | /* Sever connection to subscriber */ | 221 | /* Sever connection to subscriber */ |
239 | |||
240 | tipc_shutdown(port_ref); | 222 | tipc_shutdown(port_ref); |
241 | tipc_deleteport(port_ref); | 223 | tipc_deleteport(port_ref); |
242 | 224 | ||
243 | /* Destroy any existing subscriptions for subscriber */ | 225 | /* Destroy any existing subscriptions for subscriber */ |
244 | |||
245 | list_for_each_entry_safe(sub, sub_temp, &subscriber->subscription_list, | 226 | list_for_each_entry_safe(sub, sub_temp, &subscriber->subscription_list, |
246 | subscription_list) { | 227 | subscription_list) { |
247 | if (sub->timeout != TIPC_WAIT_FOREVER) { | 228 | if (sub->timeout != TIPC_WAIT_FOREVER) { |
@@ -252,17 +233,14 @@ static void subscr_terminate(struct tipc_subscriber *subscriber) | |||
252 | } | 233 | } |
253 | 234 | ||
254 | /* Remove subscriber from topology server's subscriber list */ | 235 | /* Remove subscriber from topology server's subscriber list */ |
255 | |||
256 | spin_lock_bh(&topsrv.lock); | 236 | spin_lock_bh(&topsrv.lock); |
257 | list_del(&subscriber->subscriber_list); | 237 | list_del(&subscriber->subscriber_list); |
258 | spin_unlock_bh(&topsrv.lock); | 238 | spin_unlock_bh(&topsrv.lock); |
259 | 239 | ||
260 | /* Reclaim subscriber lock */ | 240 | /* Reclaim subscriber lock */ |
261 | |||
262 | spin_lock_bh(subscriber->lock); | 241 | spin_lock_bh(subscriber->lock); |
263 | 242 | ||
264 | /* Now destroy subscriber */ | 243 | /* Now destroy subscriber */ |
265 | |||
266 | kfree(subscriber); | 244 | kfree(subscriber); |
267 | } | 245 | } |
268 | 246 | ||
@@ -275,7 +253,6 @@ static void subscr_terminate(struct tipc_subscriber *subscriber) | |||
275 | * | 253 | * |
276 | * Note that fields of 's' use subscriber's endianness! | 254 | * Note that fields of 's' use subscriber's endianness! |
277 | */ | 255 | */ |
278 | |||
279 | static void subscr_cancel(struct tipc_subscr *s, | 256 | static void subscr_cancel(struct tipc_subscr *s, |
280 | struct tipc_subscriber *subscriber) | 257 | struct tipc_subscriber *subscriber) |
281 | { | 258 | { |
@@ -284,7 +261,6 @@ static void subscr_cancel(struct tipc_subscr *s, | |||
284 | int found = 0; | 261 | int found = 0; |
285 | 262 | ||
286 | /* Find first matching subscription, exit if not found */ | 263 | /* Find first matching subscription, exit if not found */ |
287 | |||
288 | list_for_each_entry_safe(sub, sub_temp, &subscriber->subscription_list, | 264 | list_for_each_entry_safe(sub, sub_temp, &subscriber->subscription_list, |
289 | subscription_list) { | 265 | subscription_list) { |
290 | if (!memcmp(s, &sub->evt.s, sizeof(struct tipc_subscr))) { | 266 | if (!memcmp(s, &sub->evt.s, sizeof(struct tipc_subscr))) { |
@@ -296,7 +272,6 @@ static void subscr_cancel(struct tipc_subscr *s, | |||
296 | return; | 272 | return; |
297 | 273 | ||
298 | /* Cancel subscription timer (if used), then delete subscription */ | 274 | /* Cancel subscription timer (if used), then delete subscription */ |
299 | |||
300 | if (sub->timeout != TIPC_WAIT_FOREVER) { | 275 | if (sub->timeout != TIPC_WAIT_FOREVER) { |
301 | sub->timeout = TIPC_WAIT_FOREVER; | 276 | sub->timeout = TIPC_WAIT_FOREVER; |
302 | spin_unlock_bh(subscriber->lock); | 277 | spin_unlock_bh(subscriber->lock); |
@@ -312,7 +287,6 @@ static void subscr_cancel(struct tipc_subscr *s, | |||
312 | * | 287 | * |
313 | * Called with subscriber port locked. | 288 | * Called with subscriber port locked. |
314 | */ | 289 | */ |
315 | |||
316 | static struct tipc_subscription *subscr_subscribe(struct tipc_subscr *s, | 290 | static struct tipc_subscription *subscr_subscribe(struct tipc_subscr *s, |
317 | struct tipc_subscriber *subscriber) | 291 | struct tipc_subscriber *subscriber) |
318 | { | 292 | { |
@@ -320,11 +294,9 @@ static struct tipc_subscription *subscr_subscribe(struct tipc_subscr *s, | |||
320 | int swap; | 294 | int swap; |
321 | 295 | ||
322 | /* Determine subscriber's endianness */ | 296 | /* Determine subscriber's endianness */ |
323 | |||
324 | swap = !(s->filter & (TIPC_SUB_PORTS | TIPC_SUB_SERVICE)); | 297 | swap = !(s->filter & (TIPC_SUB_PORTS | TIPC_SUB_SERVICE)); |
325 | 298 | ||
326 | /* Detect & process a subscription cancellation request */ | 299 | /* Detect & process a subscription cancellation request */ |
327 | |||
328 | if (s->filter & htohl(TIPC_SUB_CANCEL, swap)) { | 300 | if (s->filter & htohl(TIPC_SUB_CANCEL, swap)) { |
329 | s->filter &= ~htohl(TIPC_SUB_CANCEL, swap); | 301 | s->filter &= ~htohl(TIPC_SUB_CANCEL, swap); |
330 | subscr_cancel(s, subscriber); | 302 | subscr_cancel(s, subscriber); |
@@ -332,7 +304,6 @@ static struct tipc_subscription *subscr_subscribe(struct tipc_subscr *s, | |||
332 | } | 304 | } |
333 | 305 | ||
334 | /* Refuse subscription if global limit exceeded */ | 306 | /* Refuse subscription if global limit exceeded */ |
335 | |||
336 | if (atomic_read(&topsrv.subscription_count) >= tipc_max_subscriptions) { | 307 | if (atomic_read(&topsrv.subscription_count) >= tipc_max_subscriptions) { |
337 | warn("Subscription rejected, subscription limit reached (%u)\n", | 308 | warn("Subscription rejected, subscription limit reached (%u)\n", |
338 | tipc_max_subscriptions); | 309 | tipc_max_subscriptions); |
@@ -341,7 +312,6 @@ static struct tipc_subscription *subscr_subscribe(struct tipc_subscr *s, | |||
341 | } | 312 | } |
342 | 313 | ||
343 | /* Allocate subscription object */ | 314 | /* Allocate subscription object */ |
344 | |||
345 | sub = kmalloc(sizeof(*sub), GFP_ATOMIC); | 315 | sub = kmalloc(sizeof(*sub), GFP_ATOMIC); |
346 | if (!sub) { | 316 | if (!sub) { |
347 | warn("Subscription rejected, no memory\n"); | 317 | warn("Subscription rejected, no memory\n"); |
@@ -350,7 +320,6 @@ static struct tipc_subscription *subscr_subscribe(struct tipc_subscr *s, | |||
350 | } | 320 | } |
351 | 321 | ||
352 | /* Initialize subscription object */ | 322 | /* Initialize subscription object */ |
353 | |||
354 | sub->seq.type = htohl(s->seq.type, swap); | 323 | sub->seq.type = htohl(s->seq.type, swap); |
355 | sub->seq.lower = htohl(s->seq.lower, swap); | 324 | sub->seq.lower = htohl(s->seq.lower, swap); |
356 | sub->seq.upper = htohl(s->seq.upper, swap); | 325 | sub->seq.upper = htohl(s->seq.upper, swap); |
@@ -384,7 +353,6 @@ static struct tipc_subscription *subscr_subscribe(struct tipc_subscr *s, | |||
384 | * | 353 | * |
385 | * Called with subscriber's server port unlocked. | 354 | * Called with subscriber's server port unlocked. |
386 | */ | 355 | */ |
387 | |||
388 | static void subscr_conn_shutdown_event(void *usr_handle, | 356 | static void subscr_conn_shutdown_event(void *usr_handle, |
389 | u32 port_ref, | 357 | u32 port_ref, |
390 | struct sk_buff **buf, | 358 | struct sk_buff **buf, |
@@ -408,7 +376,6 @@ static void subscr_conn_shutdown_event(void *usr_handle, | |||
408 | * | 376 | * |
409 | * Called with subscriber's server port unlocked. | 377 | * Called with subscriber's server port unlocked. |
410 | */ | 378 | */ |
411 | |||
412 | static void subscr_conn_msg_event(void *usr_handle, | 379 | static void subscr_conn_msg_event(void *usr_handle, |
413 | u32 port_ref, | 380 | u32 port_ref, |
414 | struct sk_buff **buf, | 381 | struct sk_buff **buf, |
@@ -423,7 +390,6 @@ static void subscr_conn_msg_event(void *usr_handle, | |||
423 | * Lock subscriber's server port (& make a local copy of lock pointer, | 390 | * Lock subscriber's server port (& make a local copy of lock pointer, |
424 | * in case subscriber is deleted while processing subscription request) | 391 | * in case subscriber is deleted while processing subscription request) |
425 | */ | 392 | */ |
426 | |||
427 | if (tipc_port_lock(port_ref) == NULL) | 393 | if (tipc_port_lock(port_ref) == NULL) |
428 | return; | 394 | return; |
429 | 395 | ||
@@ -451,7 +417,6 @@ static void subscr_conn_msg_event(void *usr_handle, | |||
451 | * timeout code cannot delete the subscription, | 417 | * timeout code cannot delete the subscription, |
452 | * so the subscription object is still protected. | 418 | * so the subscription object is still protected. |
453 | */ | 419 | */ |
454 | |||
455 | tipc_nametbl_subscribe(sub); | 420 | tipc_nametbl_subscribe(sub); |
456 | } | 421 | } |
457 | } | 422 | } |
@@ -460,7 +425,6 @@ static void subscr_conn_msg_event(void *usr_handle, | |||
460 | /** | 425 | /** |
461 | * subscr_named_msg_event - handle request to establish a new subscriber | 426 | * subscr_named_msg_event - handle request to establish a new subscriber |
462 | */ | 427 | */ |
463 | |||
464 | static void subscr_named_msg_event(void *usr_handle, | 428 | static void subscr_named_msg_event(void *usr_handle, |
465 | u32 port_ref, | 429 | u32 port_ref, |
466 | struct sk_buff **buf, | 430 | struct sk_buff **buf, |
@@ -474,7 +438,6 @@ static void subscr_named_msg_event(void *usr_handle, | |||
474 | u32 server_port_ref; | 438 | u32 server_port_ref; |
475 | 439 | ||
476 | /* Create subscriber object */ | 440 | /* Create subscriber object */ |
477 | |||
478 | subscriber = kzalloc(sizeof(struct tipc_subscriber), GFP_ATOMIC); | 441 | subscriber = kzalloc(sizeof(struct tipc_subscriber), GFP_ATOMIC); |
479 | if (subscriber == NULL) { | 442 | if (subscriber == NULL) { |
480 | warn("Subscriber rejected, no memory\n"); | 443 | warn("Subscriber rejected, no memory\n"); |
@@ -484,7 +447,6 @@ static void subscr_named_msg_event(void *usr_handle, | |||
484 | INIT_LIST_HEAD(&subscriber->subscriber_list); | 447 | INIT_LIST_HEAD(&subscriber->subscriber_list); |
485 | 448 | ||
486 | /* Create server port & establish connection to subscriber */ | 449 | /* Create server port & establish connection to subscriber */ |
487 | |||
488 | tipc_createport(subscriber, | 450 | tipc_createport(subscriber, |
489 | importance, | 451 | importance, |
490 | NULL, | 452 | NULL, |
@@ -503,26 +465,21 @@ static void subscr_named_msg_event(void *usr_handle, | |||
503 | tipc_connect2port(subscriber->port_ref, orig); | 465 | tipc_connect2port(subscriber->port_ref, orig); |
504 | 466 | ||
505 | /* Lock server port (& save lock address for future use) */ | 467 | /* Lock server port (& save lock address for future use) */ |
506 | |||
507 | subscriber->lock = tipc_port_lock(subscriber->port_ref)->lock; | 468 | subscriber->lock = tipc_port_lock(subscriber->port_ref)->lock; |
508 | 469 | ||
509 | /* Add subscriber to topology server's subscriber list */ | 470 | /* Add subscriber to topology server's subscriber list */ |
510 | |||
511 | spin_lock_bh(&topsrv.lock); | 471 | spin_lock_bh(&topsrv.lock); |
512 | list_add(&subscriber->subscriber_list, &topsrv.subscriber_list); | 472 | list_add(&subscriber->subscriber_list, &topsrv.subscriber_list); |
513 | spin_unlock_bh(&topsrv.lock); | 473 | spin_unlock_bh(&topsrv.lock); |
514 | 474 | ||
515 | /* Unlock server port */ | 475 | /* Unlock server port */ |
516 | |||
517 | server_port_ref = subscriber->port_ref; | 476 | server_port_ref = subscriber->port_ref; |
518 | spin_unlock_bh(subscriber->lock); | 477 | spin_unlock_bh(subscriber->lock); |
519 | 478 | ||
520 | /* Send an ACK- to complete connection handshaking */ | 479 | /* Send an ACK- to complete connection handshaking */ |
521 | |||
522 | tipc_send(server_port_ref, 0, NULL, 0); | 480 | tipc_send(server_port_ref, 0, NULL, 0); |
523 | 481 | ||
524 | /* Handle optional subscription request */ | 482 | /* Handle optional subscription request */ |
525 | |||
526 | if (size != 0) { | 483 | if (size != 0) { |
527 | subscr_conn_msg_event(subscriber, server_port_ref, | 484 | subscr_conn_msg_event(subscriber, server_port_ref, |
528 | buf, data, size); | 485 | buf, data, size); |