if (blkif->blk_ring.sring) {
unmap_frontend_page(blkif);
vfree(blkif->blk_ring.sring);
+ blkif->blk_ring.sring = NULL;
}
kmem_cache_free(blkif_cachep, blkif);
static int destroy_netdev(struct net_device *netdev)
{
- struct net_private *np = NULL;
#ifdef CONFIG_PROC_FS
xennet_proc_delif(netdev);
unregister_netdev(netdev);
- np = netdev_priv(netdev);
- list_del(&np->list);
-
- kfree(netdev);
-
return 0;
}
}
info = netdev_priv(netdev);
+ dev->data = info;
+
err = talk_to_backend(dev, info);
if (err) {
destroy_netdev(netdev);
+ kfree(netdev);
+ dev->data = NULL;
return err;
}
+
/* Call once in case entries already there. */
watch_for_status(&info->watch, info->watch.node);