aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/bcast.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/bcast.c')
-rw-r--r--net/tipc/bcast.c37
1 files changed, 11 insertions, 26 deletions
diff --git a/net/tipc/bcast.c b/net/tipc/bcast.c
index 28908f54459e..738cb642d31b 100644
--- a/net/tipc/bcast.c
+++ b/net/tipc/bcast.c
@@ -98,10 +98,13 @@ struct bclink {
98 struct tipc_node *retransmit_to; 98 struct tipc_node *retransmit_to;
99}; 99};
100 100
101static struct bcbearer bcast_bearer;
102static struct bclink bcast_link;
103
104static struct bcbearer *bcbearer = &bcast_bearer;
105static struct bclink *bclink = &bcast_link;
106static struct link *bcl = &bcast_link.link;
101 107
102static struct bcbearer *bcbearer;
103static struct bclink *bclink;
104static struct link *bcl;
105static DEFINE_SPINLOCK(bc_lock); 108static DEFINE_SPINLOCK(bc_lock);
106 109
107/* broadcast-capable node map */ 110/* broadcast-capable node map */
@@ -752,25 +755,13 @@ int tipc_bclink_set_queue_limits(u32 limit)
752 return 0; 755 return 0;
753} 756}
754 757
755int tipc_bclink_init(void) 758void tipc_bclink_init(void)
756{ 759{
757 bcbearer = kzalloc(sizeof(*bcbearer), GFP_ATOMIC);
758 bclink = kzalloc(sizeof(*bclink), GFP_ATOMIC);
759 if (!bcbearer || !bclink) {
760 warn("Broadcast link creation failed, no memory\n");
761 kfree(bcbearer);
762 bcbearer = NULL;
763 kfree(bclink);
764 bclink = NULL;
765 return -ENOMEM;
766 }
767
768 INIT_LIST_HEAD(&bcbearer->bearer.cong_links); 760 INIT_LIST_HEAD(&bcbearer->bearer.cong_links);
769 bcbearer->bearer.media = &bcbearer->media; 761 bcbearer->bearer.media = &bcbearer->media;
770 bcbearer->media.send_msg = tipc_bcbearer_send; 762 bcbearer->media.send_msg = tipc_bcbearer_send;
771 sprintf(bcbearer->media.name, "tipc-broadcast"); 763 sprintf(bcbearer->media.name, "tipc-broadcast");
772 764
773 bcl = &bclink->link;
774 INIT_LIST_HEAD(&bcl->waiting_ports); 765 INIT_LIST_HEAD(&bcl->waiting_ports);
775 bcl->next_out_no = 1; 766 bcl->next_out_no = 1;
776 spin_lock_init(&bclink->node.lock); 767 spin_lock_init(&bclink->node.lock);
@@ -780,22 +771,16 @@ int tipc_bclink_init(void)
780 bcl->b_ptr = &bcbearer->bearer; 771 bcl->b_ptr = &bcbearer->bearer;
781 bcl->state = WORKING_WORKING; 772 bcl->state = WORKING_WORKING;
782 strlcpy(bcl->name, tipc_bclink_name, TIPC_MAX_LINK_NAME); 773 strlcpy(bcl->name, tipc_bclink_name, TIPC_MAX_LINK_NAME);
783
784 return 0;
785} 774}
786 775
787void tipc_bclink_stop(void) 776void tipc_bclink_stop(void)
788{ 777{
789 spin_lock_bh(&bc_lock); 778 spin_lock_bh(&bc_lock);
790 if (bcbearer) { 779 tipc_link_stop(bcl);
791 tipc_link_stop(bcl);
792 bcl = NULL;
793 kfree(bclink);
794 bclink = NULL;
795 kfree(bcbearer);
796 bcbearer = NULL;
797 }
798 spin_unlock_bh(&bc_lock); 780 spin_unlock_bh(&bc_lock);
781
782 memset(bclink, 0, sizeof(*bclink));
783 memset(bcbearer, 0, sizeof(*bcbearer));
799} 784}
800 785
801 786