static struct net_device *create_netdev(struct xenbus_device *);
static void end_access(int, void *);
+static void netif_release_rings(struct netfront_info *);
static void netif_disconnect_backend(struct netfront_info *);
static int network_connect(struct net_device *);
return 0;
fail:
+ netif_release_rings(info);
return err;
}
};
#endif
+static void netif_release_rings(struct netfront_info *info)
+{
+ end_access(info->tx_ring_ref, info->tx.sring);
+ end_access(info->rx_ring_ref, info->rx.sring);
+ info->tx_ring_ref = GRANT_INVALID_REF;
+ info->rx_ring_ref = GRANT_INVALID_REF;
+ info->tx.sring = NULL;
+ info->rx.sring = NULL;
+}
static void netif_disconnect_backend(struct netfront_info *info)
{
unbind_from_irqhandler(info->irq, info->netdev);
info->irq = 0;
- end_access(info->tx_ring_ref, info->tx.sring);
- end_access(info->rx_ring_ref, info->rx.sring);
- info->tx_ring_ref = GRANT_INVALID_REF;
- info->rx_ring_ref = GRANT_INVALID_REF;
- info->tx.sring = NULL;
- info->rx.sring = NULL;
+ netif_release_rings(info);
}