|
@@ -845,14 +845,21 @@ static void link_prepare_wakeup(struct tipc_link *l)
|
|
|
|
|
|
void tipc_link_reset(struct tipc_link *l)
|
|
void tipc_link_reset(struct tipc_link *l)
|
|
{
|
|
{
|
|
|
|
+ struct sk_buff_head list;
|
|
|
|
+
|
|
|
|
+ __skb_queue_head_init(&list);
|
|
|
|
+
|
|
l->in_session = false;
|
|
l->in_session = false;
|
|
l->session++;
|
|
l->session++;
|
|
l->mtu = l->advertised_mtu;
|
|
l->mtu = l->advertised_mtu;
|
|
|
|
+
|
|
spin_lock_bh(&l->wakeupq.lock);
|
|
spin_lock_bh(&l->wakeupq.lock);
|
|
|
|
+ skb_queue_splice_init(&l->wakeupq, &list);
|
|
|
|
+ spin_unlock_bh(&l->wakeupq.lock);
|
|
|
|
+
|
|
spin_lock_bh(&l->inputq->lock);
|
|
spin_lock_bh(&l->inputq->lock);
|
|
- skb_queue_splice_init(&l->wakeupq, l->inputq);
|
|
|
|
|
|
+ skb_queue_splice_init(&list, l->inputq);
|
|
spin_unlock_bh(&l->inputq->lock);
|
|
spin_unlock_bh(&l->inputq->lock);
|
|
- spin_unlock_bh(&l->wakeupq.lock);
|
|
|
|
|
|
|
|
__skb_queue_purge(&l->transmq);
|
|
__skb_queue_purge(&l->transmq);
|
|
__skb_queue_purge(&l->deferdq);
|
|
__skb_queue_purge(&l->deferdq);
|