--- x/net/vmw_vsock/vsock_loopback.c +++ y/net/vmw_vsock/vsock_loopback.c @@ -44,8 +44,15 @@ static int vsock_loopback_send_pkt(struc static int vsock_loopback_cancel_pkt(struct vsock_sock *vsk) { struct vsock_loopback *vsock = &the_vsock_loopback; + struct sk_buff_head pkts; - virtio_transport_purge_skbs(vsk, &vsock->pkt_queue); + skb_queue_head_init(&pkts); + + spin_lock_bh(&vsock->pkt_list_lock); + skb_queue_splice_init(&vsock->pkt_queue, &pkts); + spin_unlock_bh(&vsock->pkt_list_lock); + + virtio_transport_purge_skbs(vsk, &pkts); return 0; }