@@ -533,6 +533,9 @@ void xenvif_carrier_off(struct xenvif *vif)
}
rtnl_unlock();
+
+ skb_queue_purge(&vif->rx_queue);
+ vif->rx_last_skb_slots = 0;
}
void xenvif_disconnect(struct xenvif *vif)
@@ -1932,7 +1932,6 @@ static void xenvif_start_queue(struct xenvif *vif)
int xenvif_kthread_guest_rx(void *data)
{
struct xenvif *vif = data;
- struct sk_buff *skb;
while (!kthread_should_stop()) {
wait_event_interruptible(vif->wq,
@@ -2009,8 +2008,7 @@ int xenvif_kthread_guest_rx(void *data)
}
/* Bin any remaining skbs */
- while ((skb = skb_dequeue(&vif->rx_queue)) != NULL)
- dev_kfree_skb(skb);
+ skb_queue_purge(&vif->rx_queue);
return 0;
}