diff options
Diffstat (limited to 'net/tipc/bcast.c')
-rw-r--r-- | net/tipc/bcast.c | 37 |
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 | ||
101 | static struct bcbearer bcast_bearer; | ||
102 | static struct bclink bcast_link; | ||
103 | |||
104 | static struct bcbearer *bcbearer = &bcast_bearer; | ||
105 | static struct bclink *bclink = &bcast_link; | ||
106 | static struct link *bcl = &bcast_link.link; | ||
101 | 107 | ||
102 | static struct bcbearer *bcbearer; | ||
103 | static struct bclink *bclink; | ||
104 | static struct link *bcl; | ||
105 | static DEFINE_SPINLOCK(bc_lock); | 108 | static 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 | ||
755 | int tipc_bclink_init(void) | 758 | void 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 | ||
787 | void tipc_bclink_stop(void) | 776 | void 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 | ||