module_init(xen_blkif_init);
+static void __exit xen_blkif_exit(void)
+{
+ xen_blkif_interface_exit();
+ xen_blkif_xenbus_exit();
+}
+
+module_exit(xen_blkif_exit);
+
MODULE_LICENSE("Dual BSD/GPL");
MODULE_ALIAS("xen-backend:vbd");
blkif_sector_t sector_number;
};
int xen_blkif_interface_init(void);
+void xen_blkif_interface_exit(void);
int xen_blkif_xenbus_init(void);
+void xen_blkif_xenbus_exit(void);
irqreturn_t xen_blkif_be_int(int irq, void *dev_id);
int xen_blkif_schedule(void *arg);
init_completion(&blkif->drain_complete);
INIT_WORK(&blkif->free_work, xen_blkif_deferred_free);
+ __module_get(THIS_MODULE);
+
return blkif;
}
/* Make sure everything is drained before shutting down */
kmem_cache_free(xen_blkif_cachep, blkif);
+
+ module_put(THIS_MODULE);
}
int __init xen_blkif_interface_init(void)
return 0;
}
+void xen_blkif_interface_exit(void)
+{
+ kmem_cache_destroy(xen_blkif_cachep);
+}
+
/*
* sysfs interface for VBD I/O requests
*/
{
return xenbus_register_backend(&xen_blkbk_driver);
}
+
+void xen_blkif_xenbus_exit(void)
+{
+ xenbus_unregister_driver(&xen_blkbk_driver);
+}