diff options
Diffstat (limited to 'net/tipc/bearer.c')
| -rw-r--r-- | net/tipc/bearer.c | 42 | 
1 files changed, 12 insertions, 30 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c index 52ae17b2583..9927d1d56c4 100644 --- a/net/tipc/bearer.c +++ b/net/tipc/bearer.c @@ -63,7 +63,7 @@ static int media_name_valid(const char *name)  	len = strlen(name);  	if ((len + 1) > TIPC_MAX_MEDIA_NAME)  		return 0; -	return (strspn(name, tipc_alphabet) == len); +	return strspn(name, tipc_alphabet) == len;  }  /** @@ -288,9 +288,6 @@ static struct bearer *bearer_find(const char *name)  	struct bearer *b_ptr;  	u32 i; -	if (tipc_mode != TIPC_NET_MODE) -		return NULL; -  	for (i = 0, b_ptr = tipc_bearers; i < MAX_BEARERS; i++, b_ptr++) {  		if (b_ptr->active && (!strcmp(b_ptr->publ.name, name)))  			return b_ptr; @@ -559,8 +556,6 @@ restart:  	}  	b_ptr = &tipc_bearers[bearer_id]; -	memset(b_ptr, 0, sizeof(struct bearer)); -  	strcpy(b_ptr->publ.name, name);  	res = m_ptr->enable_bearer(&b_ptr->publ);  	if (res) { @@ -630,30 +625,17 @@ int tipc_block_bearer(const char *name)   * Note: This routine assumes caller holds tipc_net_lock.   */ -static int bearer_disable(const char *name) +static int bearer_disable(struct bearer *b_ptr)  { -	struct bearer *b_ptr;  	struct link *l_ptr;  	struct link *temp_l_ptr; -	b_ptr = bearer_find(name); -	if (!b_ptr) { -		warn("Attempt to disable unknown bearer <%s>\n", name); -		return -EINVAL; -	} - -	info("Disabling bearer <%s>\n", name); +	info("Disabling bearer <%s>\n", b_ptr->publ.name);  	tipc_disc_stop_link_req(b_ptr->link_req);  	spin_lock_bh(&b_ptr->publ.lock);  	b_ptr->link_req = NULL;  	b_ptr->publ.blocked = 1; -	if (b_ptr->media->disable_bearer) { -		spin_unlock_bh(&b_ptr->publ.lock); -		write_unlock_bh(&tipc_net_lock); -		b_ptr->media->disable_bearer(&b_ptr->publ); -		write_lock_bh(&tipc_net_lock); -		spin_lock_bh(&b_ptr->publ.lock); -	} +	b_ptr->media->disable_bearer(&b_ptr->publ);  	list_for_each_entry_safe(l_ptr, temp_l_ptr, &b_ptr->links, link_list) {  		tipc_link_delete(l_ptr);  	} @@ -664,10 +646,16 @@ static int bearer_disable(const char *name)  int tipc_disable_bearer(const char *name)  { +	struct bearer *b_ptr;  	int res;  	write_lock_bh(&tipc_net_lock); -	res = bearer_disable(name); +	b_ptr = bearer_find(name); +	if (b_ptr == NULL) { +		warn("Attempt to disable unknown bearer <%s>\n", name); +		res = -EINVAL; +	} else +		res = bearer_disable(b_ptr);  	write_unlock_bh(&tipc_net_lock);  	return res;  } @@ -680,13 +668,7 @@ void tipc_bearer_stop(void)  	for (i = 0; i < MAX_BEARERS; i++) {  		if (tipc_bearers[i].active) -			tipc_bearers[i].publ.blocked = 1; -	} -	for (i = 0; i < MAX_BEARERS; i++) { -		if (tipc_bearers[i].active) -			bearer_disable(tipc_bearers[i].publ.name); +			bearer_disable(&tipc_bearers[i]);  	}  	media_count = 0;  } - -  |