diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/tipc/bearer.c | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c index 75af271b9cfa..9ff89207846a 100644 --- a/net/tipc/bearer.c +++ b/net/tipc/bearer.c | |||
@@ -81,6 +81,21 @@ static struct media *media_find(const char *name) | |||
81 | } | 81 | } |
82 | 82 | ||
83 | /** | 83 | /** |
84 | * media_find_id - locates specified media object by type identifier | ||
85 | */ | ||
86 | |||
87 | static struct media *media_find_id(u8 type) | ||
88 | { | ||
89 | u32 i; | ||
90 | |||
91 | for (i = 0; i < media_count; i++) { | ||
92 | if (media_list[i].type_id == type) | ||
93 | return &media_list[i]; | ||
94 | } | ||
95 | return NULL; | ||
96 | } | ||
97 | |||
98 | /** | ||
84 | * tipc_register_media - register a media type | 99 | * tipc_register_media - register a media type |
85 | * | 100 | * |
86 | * Bearers for this media type must be activated separately at a later stage. | 101 | * Bearers for this media type must be activated separately at a later stage. |
@@ -88,8 +103,6 @@ static struct media *media_find(const char *name) | |||
88 | 103 | ||
89 | int tipc_register_media(struct media *m_ptr) | 104 | int tipc_register_media(struct media *m_ptr) |
90 | { | 105 | { |
91 | u32 media_id; | ||
92 | u32 i; | ||
93 | int res = -EINVAL; | 106 | int res = -EINVAL; |
94 | 107 | ||
95 | write_lock_bh(&tipc_net_lock); | 108 | write_lock_bh(&tipc_net_lock); |
@@ -121,29 +134,18 @@ int tipc_register_media(struct media *m_ptr) | |||
121 | goto exit; | 134 | goto exit; |
122 | } | 135 | } |
123 | 136 | ||
124 | media_id = media_count++; | 137 | if (media_count >= MAX_MEDIA) { |
125 | if (media_id >= MAX_MEDIA) { | ||
126 | warn("Media <%s> rejected, media limit reached (%u)\n", | 138 | warn("Media <%s> rejected, media limit reached (%u)\n", |
127 | m_ptr->name, MAX_MEDIA); | 139 | m_ptr->name, MAX_MEDIA); |
128 | media_count--; | ||
129 | goto exit; | 140 | goto exit; |
130 | } | 141 | } |
131 | for (i = 0; i < media_id; i++) { | 142 | if (media_find(m_ptr->name) || media_find_id(m_ptr->type_id)) { |
132 | if (media_list[i].type_id == m_ptr->type_id) { | 143 | warn("Media <%s> rejected, already registered\n", m_ptr->name); |
133 | warn("Media <%s> rejected, duplicate type (%u)\n", | 144 | goto exit; |
134 | m_ptr->name, m_ptr->type_id); | ||
135 | media_count--; | ||
136 | goto exit; | ||
137 | } | ||
138 | if (!strcmp(m_ptr->name, media_list[i].name)) { | ||
139 | warn("Media <%s> rejected, duplicate name\n", | ||
140 | m_ptr->name); | ||
141 | media_count--; | ||
142 | goto exit; | ||
143 | } | ||
144 | } | 145 | } |
145 | 146 | ||
146 | media_list[media_id] = *m_ptr; | 147 | media_list[media_count] = *m_ptr; |
148 | media_count++; | ||
147 | res = 0; | 149 | res = 0; |
148 | exit: | 150 | exit: |
149 | write_unlock_bh(&tipc_net_lock); | 151 | write_unlock_bh(&tipc_net_lock); |