|
@@ -835,7 +835,6 @@ int tipc_link_xmit(struct sk_buff *buf, u32 dest, u32 selector)
|
|
|
struct tipc_node *n_ptr;
|
|
|
int res = -ELINKCONG;
|
|
|
|
|
|
- read_lock_bh(&tipc_net_lock);
|
|
|
n_ptr = tipc_node_find(dest);
|
|
|
if (n_ptr) {
|
|
|
tipc_node_lock(n_ptr);
|
|
@@ -848,7 +847,6 @@ int tipc_link_xmit(struct sk_buff *buf, u32 dest, u32 selector)
|
|
|
} else {
|
|
|
kfree_skb(buf);
|
|
|
}
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
return res;
|
|
|
}
|
|
|
|
|
@@ -912,7 +910,6 @@ void tipc_link_names_xmit(struct list_head *message_list, u32 dest)
|
|
|
if (list_empty(message_list))
|
|
|
return;
|
|
|
|
|
|
- read_lock_bh(&tipc_net_lock);
|
|
|
n_ptr = tipc_node_find(dest);
|
|
|
if (n_ptr) {
|
|
|
tipc_node_lock(n_ptr);
|
|
@@ -927,7 +924,6 @@ void tipc_link_names_xmit(struct list_head *message_list, u32 dest)
|
|
|
}
|
|
|
tipc_node_unlock(n_ptr);
|
|
|
}
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
|
|
|
/* discard the messages if they couldn't be sent */
|
|
|
list_for_each_safe(buf, temp_buf, ((struct sk_buff *)message_list)) {
|
|
@@ -989,7 +985,6 @@ again:
|
|
|
if (unlikely(res < 0))
|
|
|
return res;
|
|
|
|
|
|
- read_lock_bh(&tipc_net_lock);
|
|
|
node = tipc_node_find(destaddr);
|
|
|
if (likely(node)) {
|
|
|
tipc_node_lock(node);
|
|
@@ -1000,7 +995,6 @@ again:
|
|
|
&sender->max_pkt);
|
|
|
exit:
|
|
|
tipc_node_unlock(node);
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
return res;
|
|
|
}
|
|
|
|
|
@@ -1017,7 +1011,6 @@ exit:
|
|
|
*/
|
|
|
sender->max_pkt = l_ptr->max_pkt;
|
|
|
tipc_node_unlock(node);
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
|
|
|
|
|
|
if ((msg_hdr_sz(hdr) + res) <= sender->max_pkt)
|
|
@@ -1028,7 +1021,6 @@ exit:
|
|
|
}
|
|
|
tipc_node_unlock(node);
|
|
|
}
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
|
|
|
/* Couldn't find a link to the destination node */
|
|
|
kfree_skb(buf);
|
|
@@ -1273,12 +1265,9 @@ static void link_reset_all(unsigned long addr)
|
|
|
char addr_string[16];
|
|
|
u32 i;
|
|
|
|
|
|
- read_lock_bh(&tipc_net_lock);
|
|
|
n_ptr = tipc_node_find((u32)addr);
|
|
|
- if (!n_ptr) {
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
+ if (!n_ptr)
|
|
|
return; /* node no longer exists */
|
|
|
- }
|
|
|
|
|
|
tipc_node_lock(n_ptr);
|
|
|
|
|
@@ -1293,7 +1282,6 @@ static void link_reset_all(unsigned long addr)
|
|
|
}
|
|
|
|
|
|
tipc_node_unlock(n_ptr);
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
}
|
|
|
|
|
|
static void link_retransmit_failure(struct tipc_link *l_ptr,
|
|
@@ -1458,7 +1446,6 @@ static int link_recv_buf_validate(struct sk_buff *buf)
|
|
|
*/
|
|
|
void tipc_rcv(struct sk_buff *head, struct tipc_bearer *b_ptr)
|
|
|
{
|
|
|
- read_lock_bh(&tipc_net_lock);
|
|
|
while (head) {
|
|
|
struct tipc_node *n_ptr;
|
|
|
struct tipc_link *l_ptr;
|
|
@@ -1646,7 +1633,6 @@ unlock_discard:
|
|
|
discard:
|
|
|
kfree_skb(buf);
|
|
|
}
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -2408,8 +2394,6 @@ void tipc_link_set_queue_limits(struct tipc_link *l_ptr, u32 window)
|
|
|
/* tipc_link_find_owner - locate owner node of link by link's name
|
|
|
* @name: pointer to link name string
|
|
|
* @bearer_id: pointer to index in 'node->links' array where the link was found.
|
|
|
- * Caller must hold 'tipc_net_lock' to ensure node and bearer are not deleted;
|
|
|
- * this also prevents link deletion.
|
|
|
*
|
|
|
* Returns pointer to node owning the link, or 0 if no matching link is found.
|
|
|
*/
|
|
@@ -2471,7 +2455,7 @@ static int link_value_is_valid(u16 cmd, u32 new_value)
|
|
|
* @new_value: new value of link, bearer, or media setting
|
|
|
* @cmd: which link, bearer, or media attribute to set (TIPC_CMD_SET_LINK_*)
|
|
|
*
|
|
|
- * Caller must hold 'tipc_net_lock' to ensure link/bearer/media is not deleted.
|
|
|
+ * Caller must hold RTNL lock to ensure link/bearer/media is not deleted.
|
|
|
*
|
|
|
* Returns 0 if value updated and negative value on error.
|
|
|
*/
|
|
@@ -2577,9 +2561,7 @@ struct sk_buff *tipc_link_cmd_config(const void *req_tlv_area, int req_tlv_space
|
|
|
" (cannot change setting on broadcast link)");
|
|
|
}
|
|
|
|
|
|
- read_lock_bh(&tipc_net_lock);
|
|
|
res = link_cmd_set_value(args->name, new_value, cmd);
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
if (res)
|
|
|
return tipc_cfg_reply_error_string("cannot change link setting");
|
|
|
|
|
@@ -2613,22 +2595,18 @@ struct sk_buff *tipc_link_cmd_reset_stats(const void *req_tlv_area, int req_tlv_
|
|
|
return tipc_cfg_reply_error_string("link not found");
|
|
|
return tipc_cfg_reply_none();
|
|
|
}
|
|
|
- read_lock_bh(&tipc_net_lock);
|
|
|
node = tipc_link_find_owner(link_name, &bearer_id);
|
|
|
- if (!node) {
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
+ if (!node)
|
|
|
return tipc_cfg_reply_error_string("link not found");
|
|
|
- }
|
|
|
+
|
|
|
tipc_node_lock(node);
|
|
|
l_ptr = node->links[bearer_id];
|
|
|
if (!l_ptr) {
|
|
|
tipc_node_unlock(node);
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
return tipc_cfg_reply_error_string("link not found");
|
|
|
}
|
|
|
link_reset_statistics(l_ptr);
|
|
|
tipc_node_unlock(node);
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
return tipc_cfg_reply_none();
|
|
|
}
|
|
|
|
|
@@ -2661,18 +2639,15 @@ static int tipc_link_stats(const char *name, char *buf, const u32 buf_size)
|
|
|
if (!strcmp(name, tipc_bclink_name))
|
|
|
return tipc_bclink_stats(buf, buf_size);
|
|
|
|
|
|
- read_lock_bh(&tipc_net_lock);
|
|
|
node = tipc_link_find_owner(name, &bearer_id);
|
|
|
- if (!node) {
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
+ if (!node)
|
|
|
return 0;
|
|
|
- }
|
|
|
+
|
|
|
tipc_node_lock(node);
|
|
|
|
|
|
l = node->links[bearer_id];
|
|
|
if (!l) {
|
|
|
tipc_node_unlock(node);
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -2738,7 +2713,6 @@ static int tipc_link_stats(const char *name, char *buf, const u32 buf_size)
|
|
|
(s->accu_queue_sz / s->queue_sz_counts) : 0);
|
|
|
|
|
|
tipc_node_unlock(node);
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -2789,7 +2763,6 @@ u32 tipc_link_get_max_pkt(u32 dest, u32 selector)
|
|
|
if (dest == tipc_own_addr)
|
|
|
return MAX_MSG_SIZE;
|
|
|
|
|
|
- read_lock_bh(&tipc_net_lock);
|
|
|
n_ptr = tipc_node_find(dest);
|
|
|
if (n_ptr) {
|
|
|
tipc_node_lock(n_ptr);
|
|
@@ -2798,7 +2771,6 @@ u32 tipc_link_get_max_pkt(u32 dest, u32 selector)
|
|
|
res = l_ptr->max_pkt;
|
|
|
tipc_node_unlock(n_ptr);
|
|
|
}
|
|
|
- read_unlock_bh(&tipc_net_lock);
|
|
|
return res;
|
|
|
}
|
|
|
|