aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/link.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/link.c')
-rw-r--r--net/tipc/link.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c
index d229a36968da..f6552e4f4b43 100644
--- a/net/tipc/link.c
+++ b/net/tipc/link.c
@@ -845,14 +845,21 @@ static void link_prepare_wakeup(struct tipc_link *l)
845 845
846void tipc_link_reset(struct tipc_link *l) 846void tipc_link_reset(struct tipc_link *l)
847{ 847{
848 struct sk_buff_head list;
849
850 __skb_queue_head_init(&list);
851
848 l->in_session = false; 852 l->in_session = false;
849 l->session++; 853 l->session++;
850 l->mtu = l->advertised_mtu; 854 l->mtu = l->advertised_mtu;
855
851 spin_lock_bh(&l->wakeupq.lock); 856 spin_lock_bh(&l->wakeupq.lock);
857 skb_queue_splice_init(&l->wakeupq, &list);
858 spin_unlock_bh(&l->wakeupq.lock);
859
852 spin_lock_bh(&l->inputq->lock); 860 spin_lock_bh(&l->inputq->lock);
853 skb_queue_splice_init(&l->wakeupq, l->inputq); 861 skb_queue_splice_init(&list, l->inputq);
854 spin_unlock_bh(&l->inputq->lock); 862 spin_unlock_bh(&l->inputq->lock);
855 spin_unlock_bh(&l->wakeupq.lock);
856 863
857 __skb_queue_purge(&l->transmq); 864 __skb_queue_purge(&l->transmq);
858 __skb_queue_purge(&l->deferdq); 865 __skb_queue_purge(&l->deferdq);