static int __init blkif_init(void)
{
int i, mmap_pages;
+ int rc = 0;
if (!xen_pv_domain())
return -ENODEV;
mmap_pages, GFP_KERNEL);
pending_pages = alloc_empty_pages_and_pagevec(mmap_pages);
- if (!pending_reqs || !pending_grant_handles || !pending_pages)
+ if (!pending_reqs || !pending_grant_handles || !pending_pages) {
+ rc = -ENOMEM;
goto out_of_memory;
+ }
for (i = 0; i < mmap_pages; i++)
pending_grant_handles[i] = BLKBACK_INVALID_HANDLE;
- blkif_interface_init();
+ rc = blkif_interface_init();
+ if (rc)
+ goto failed_init;
memset(pending_reqs, 0, sizeof(pending_reqs));
INIT_LIST_HEAD(&pending_free);
for (i = 0; i < blkif_reqs; i++)
list_add_tail(&pending_reqs[i].free_list, &pending_free);
- blkif_xenbus_init();
+ rc = blkif_xenbus_init();
+ if (rc)
+ goto failed_init;
return 0;
out_of_memory:
+ printk(KERN_ERR "%s: out of memory\n", __func__);
+ failed_init:
kfree(pending_reqs);
kfree(pending_grant_handles);
free_empty_pages_and_pagevec(pending_pages, mmap_pages);
- printk("%s: out of memory\n", __FUNCTION__);
- return -ENOMEM;
+ return rc;
}
module_init(blkif_init);
int vbd_translate(struct phys_req *req, blkif_t *blkif, int operation);
-void blkif_interface_init(void);
+int blkif_interface_init(void);
-void blkif_xenbus_init(void);
+int blkif_xenbus_init(void);
irqreturn_t blkif_be_int(int irq, void *dev_id);
int blkif_schedule(void *arg);
kmem_cache_free(blkif_cachep, blkif);
}
-void __init blkif_interface_init(void)
+int __init blkif_interface_init(void)
{
blkif_cachep = kmem_cache_create("blkif_cache", sizeof(blkif_t),
0, 0, NULL);
+ if (!blkif_cachep)
+ return -ENOMEM;
+
+ return 0;
}
};
-void blkif_xenbus_init(void)
+int blkif_xenbus_init(void)
{
- /* XXX must_check */
- (void)xenbus_register_backend(&blkback);
+ return xenbus_register_backend(&blkback);
}