tipc: Optimize detection of duplicate media registration
Streamlines the detection of an attempt to register a TIPC media structure using an already registered name or type identifier. The revised logic now reuses an existing routine to detect an existing name and no longer unnecessarily manipulates the media type counter during an unsuccessful registration attempt. Signed-off-by: Allan Stephens <allan.stephens@windriver.com> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
This commit is contained in:
parent
706767da1b
commit
c79be4549a
|
@ -80,6 +80,21 @@ static struct media *media_find(const char *name)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* media_find_id - locates specified media object by type identifier
|
||||||
|
*/
|
||||||
|
|
||||||
|
static struct media *media_find_id(u8 type)
|
||||||
|
{
|
||||||
|
u32 i;
|
||||||
|
|
||||||
|
for (i = 0; i < media_count; i++) {
|
||||||
|
if (media_list[i].type_id == type)
|
||||||
|
return &media_list[i];
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* tipc_register_media - register a media type
|
* tipc_register_media - register a media type
|
||||||
*
|
*
|
||||||
|
@ -88,8 +103,6 @@ static struct media *media_find(const char *name)
|
||||||
|
|
||||||
int tipc_register_media(struct media *m_ptr)
|
int tipc_register_media(struct media *m_ptr)
|
||||||
{
|
{
|
||||||
u32 media_id;
|
|
||||||
u32 i;
|
|
||||||
int res = -EINVAL;
|
int res = -EINVAL;
|
||||||
|
|
||||||
write_lock_bh(&tipc_net_lock);
|
write_lock_bh(&tipc_net_lock);
|
||||||
|
@ -121,29 +134,18 @@ int tipc_register_media(struct media *m_ptr)
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
media_id = media_count++;
|
if (media_count >= MAX_MEDIA) {
|
||||||
if (media_id >= MAX_MEDIA) {
|
|
||||||
warn("Media <%s> rejected, media limit reached (%u)\n",
|
warn("Media <%s> rejected, media limit reached (%u)\n",
|
||||||
m_ptr->name, MAX_MEDIA);
|
m_ptr->name, MAX_MEDIA);
|
||||||
media_count--;
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
for (i = 0; i < media_id; i++) {
|
if (media_find(m_ptr->name) || media_find_id(m_ptr->type_id)) {
|
||||||
if (media_list[i].type_id == m_ptr->type_id) {
|
warn("Media <%s> rejected, already registered\n", m_ptr->name);
|
||||||
warn("Media <%s> rejected, duplicate type (%u)\n",
|
goto exit;
|
||||||
m_ptr->name, m_ptr->type_id);
|
|
||||||
media_count--;
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
if (!strcmp(m_ptr->name, media_list[i].name)) {
|
|
||||||
warn("Media <%s> rejected, duplicate name\n",
|
|
||||||
m_ptr->name);
|
|
||||||
media_count--;
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
media_list[media_id] = *m_ptr;
|
media_list[media_count] = *m_ptr;
|
||||||
|
media_count++;
|
||||||
res = 0;
|
res = 0;
|
||||||
exit:
|
exit:
|
||||||
write_unlock_bh(&tipc_net_lock);
|
write_unlock_bh(&tipc_net_lock);
|
||||||
|
|
Loading…
Reference in New Issue