diff options
Diffstat (limited to 'net/tipc/link.c')
-rw-r--r-- | net/tipc/link.c | 11 |
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 | ||
846 | void tipc_link_reset(struct tipc_link *l) | 846 | void 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); |