tipc: make resetting of links non-atomic
In order to facilitate future improvements to the locking structure, we want to make resetting and establishing of links non-atomic. I.e., the functions tipc_node_link_up() and tipc_node_link_down() should be called from outside the node lock context, and grab/release the node lock themselves. This requires that we can freeze the link state from the moment it is set to RESETTING or PEER_RESET in one lock context until it is set to RESET or ESTABLISHING in a later context. The recently introduced link FSM makes this possible, so we are now ready to introduce the above change. This commit implements this. Tested-by: Ying Xue <ying.xue@windriver.com> Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
cf148816ac
commit
598411d70f
@@ -916,4 +916,33 @@ static inline bool __tipc_skb_queue_sorted(struct sk_buff_head *list,
|
||||
return false;
|
||||
}
|
||||
|
||||
/* tipc_skb_queue_splice_tail - append an skb list to lock protected list
|
||||
* @list: the new list to append. Not lock protected
|
||||
* @head: target list. Lock protected.
|
||||
*/
|
||||
static inline void tipc_skb_queue_splice_tail(struct sk_buff_head *list,
|
||||
struct sk_buff_head *head)
|
||||
{
|
||||
spin_lock_bh(&head->lock);
|
||||
skb_queue_splice_tail(list, head);
|
||||
spin_unlock_bh(&head->lock);
|
||||
}
|
||||
|
||||
/* tipc_skb_queue_splice_tail_init - merge two lock protected skb lists
|
||||
* @list: the new list to add. Lock protected. Will be reinitialized
|
||||
* @head: target list. Lock protected.
|
||||
*/
|
||||
static inline void tipc_skb_queue_splice_tail_init(struct sk_buff_head *list,
|
||||
struct sk_buff_head *head)
|
||||
{
|
||||
struct sk_buff_head tmp;
|
||||
|
||||
__skb_queue_head_init(&tmp);
|
||||
|
||||
spin_lock_bh(&list->lock);
|
||||
skb_queue_splice_tail_init(list, &tmp);
|
||||
spin_unlock_bh(&list->lock);
|
||||
tipc_skb_queue_splice_tail(&tmp, head);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user