aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/tipc/subscr.c26
1 files changed, 10 insertions, 16 deletions
diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c
index 23f43d03980c..21abf1765b02 100644
--- a/net/tipc/subscr.c
+++ b/net/tipc/subscr.c
@@ -36,7 +36,7 @@
36 36
37#include "core.h" 37#include "core.h"
38#include "name_table.h" 38#include "name_table.h"
39#include "user_reg.h" 39#include "port.h"
40#include "subscr.h" 40#include "subscr.h"
41 41
42/** 42/**
@@ -64,7 +64,6 @@ struct subscriber {
64 */ 64 */
65 65
66struct top_srv { 66struct top_srv {
67 u32 user_ref;
68 u32 setup_port; 67 u32 setup_port;
69 atomic_t subscription_count; 68 atomic_t subscription_count;
70 struct list_head subscriber_list; 69 struct list_head subscriber_list;
@@ -494,7 +493,7 @@ static void subscr_named_msg_event(void *usr_handle,
494 493
495 /* Create server port & establish connection to subscriber */ 494 /* Create server port & establish connection to subscriber */
496 495
497 tipc_createport(topsrv.user_ref, 496 tipc_createport(0,
498 subscriber, 497 subscriber,
499 importance, 498 importance,
500 NULL, 499 NULL,
@@ -549,13 +548,7 @@ int tipc_subscr_start(void)
549 INIT_LIST_HEAD(&topsrv.subscriber_list); 548 INIT_LIST_HEAD(&topsrv.subscriber_list);
550 549
551 spin_lock_bh(&topsrv.lock); 550 spin_lock_bh(&topsrv.lock);
552 res = tipc_attach(&topsrv.user_ref); 551 res = tipc_createport(0,
553 if (res) {
554 spin_unlock_bh(&topsrv.lock);
555 return res;
556 }
557
558 res = tipc_createport(topsrv.user_ref,
559 NULL, 552 NULL,
560 TIPC_CRITICAL_IMPORTANCE, 553 TIPC_CRITICAL_IMPORTANCE,
561 NULL, 554 NULL,
@@ -570,16 +563,17 @@ int tipc_subscr_start(void)
570 goto failed; 563 goto failed;
571 564
572 res = tipc_nametbl_publish_rsv(topsrv.setup_port, TIPC_NODE_SCOPE, &seq); 565 res = tipc_nametbl_publish_rsv(topsrv.setup_port, TIPC_NODE_SCOPE, &seq);
573 if (res) 566 if (res) {
567 tipc_deleteport(topsrv.setup_port);
568 topsrv.setup_port = 0;
574 goto failed; 569 goto failed;
570 }
575 571
576 spin_unlock_bh(&topsrv.lock); 572 spin_unlock_bh(&topsrv.lock);
577 return 0; 573 return 0;
578 574
579failed: 575failed:
580 err("Failed to create subscription service\n"); 576 err("Failed to create subscription service\n");
581 tipc_detach(topsrv.user_ref);
582 topsrv.user_ref = 0;
583 spin_unlock_bh(&topsrv.lock); 577 spin_unlock_bh(&topsrv.lock);
584 return res; 578 return res;
585} 579}
@@ -590,8 +584,10 @@ void tipc_subscr_stop(void)
590 struct subscriber *subscriber_temp; 584 struct subscriber *subscriber_temp;
591 spinlock_t *subscriber_lock; 585 spinlock_t *subscriber_lock;
592 586
593 if (topsrv.user_ref) { 587 if (topsrv.setup_port) {
594 tipc_deleteport(topsrv.setup_port); 588 tipc_deleteport(topsrv.setup_port);
589 topsrv.setup_port = 0;
590
595 list_for_each_entry_safe(subscriber, subscriber_temp, 591 list_for_each_entry_safe(subscriber, subscriber_temp,
596 &topsrv.subscriber_list, 592 &topsrv.subscriber_list,
597 subscriber_list) { 593 subscriber_list) {
@@ -600,7 +596,5 @@ void tipc_subscr_stop(void)
600 subscr_terminate(subscriber); 596 subscr_terminate(subscriber);
601 spin_unlock_bh(subscriber_lock); 597 spin_unlock_bh(subscriber_lock);
602 } 598 }
603 tipc_detach(topsrv.user_ref);
604 topsrv.user_ref = 0;
605 } 599 }
606} 600}