Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c79be454 authored by Allan Stephens's avatar Allan Stephens Committed by Paul Gortmaker
Browse files

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: default avatarAllan Stephens <allan.stephens@windriver.com>
Signed-off-by: default avatarPaul Gortmaker <paul.gortmaker@windriver.com>
parent 706767da
Loading
Loading
Loading
Loading
+21 −19
Original line number Diff line number Diff line
@@ -80,6 +80,21 @@ static struct media *media_find(const char *name)
	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
 *
@@ -88,8 +103,6 @@ static struct media *media_find(const char *name)

int  tipc_register_media(struct media *m_ptr)
{
	u32 media_id;
	u32 i;
	int res = -EINVAL;

	write_lock_bh(&tipc_net_lock);
@@ -121,29 +134,18 @@ int tipc_register_media(struct media *m_ptr)
		goto exit;
	}

	media_id = media_count++;
	if (media_id >= MAX_MEDIA) {
	if (media_count >= MAX_MEDIA) {
		warn("Media <%s> rejected, media limit reached (%u)\n",
		     m_ptr->name, MAX_MEDIA);
		media_count--;
		goto exit;
	}
	for (i = 0; i < media_id; i++) {
		if (media_list[i].type_id == m_ptr->type_id) {
			warn("Media <%s> rejected, duplicate type (%u)\n",
			     m_ptr->name, m_ptr->type_id);
			media_count--;
	if (media_find(m_ptr->name) || media_find_id(m_ptr->type_id)) {
		warn("Media <%s> rejected, already registered\n", m_ptr->name);
		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;
exit:
	write_unlock_bh(&tipc_net_lock);