diff --git a/drivers/net/xen-netback/interface.c b/drivers/net/xen-netback/interface.c index 68d5102..ccb46c4 100644 --- a/drivers/net/xen-netback/interface.c +++ b/drivers/net/xen-netback/interface.c @@ -420,6 +420,8 @@ void xenvif_disconnect(struct xenvif *vif) atomic_dec(&vif->refcnt); wait_event(vif->waiting_to_free, atomic_read(&vif->refcnt) == 0); + /* reacquire reference since it should be 1 until freed */ + xenvif_get(vif); if (vif->tx_irq) { if (vif->tx_irq == vif->rx_irq) @@ -428,6 +430,7 @@ void xenvif_disconnect(struct xenvif *vif) unbind_from_irqhandler(vif->tx_irq, vif); unbind_from_irqhandler(vif->rx_irq, vif); } + vif->tx_irq = 0; } xen_netbk_unmap_frontend_rings(vif);