Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8770b268 authored by Konrad Rzeszutek Wilk's avatar Konrad Rzeszutek Wilk
Browse files

Fix compile warnings: ignoring return value of 'xenbus_register_backend' ..



We neglect to check the return value of xenbus_register_backend
and take actions when that fails. This patch fixes that and adds
code to deal with those type of failures.

Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
parent afd91d07
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -614,6 +614,7 @@ static void make_response(blkif_t *blkif, u64 id,
static int __init blkif_init(void)
{
	int i, mmap_pages;
	int rc = 0;

	if (!xen_pv_domain())
		return -ENODEV;
@@ -626,13 +627,17 @@ static int __init blkif_init(void)
					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);
@@ -640,16 +645,19 @@ static int __init blkif_init(void)
	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);
+2 −2
Original line number Diff line number Diff line
@@ -124,9 +124,9 @@ struct phys_req {

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);
+5 −1
Original line number Diff line number Diff line
@@ -175,8 +175,12 @@ void blkif_free(blkif_t *blkif)
	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;
}
+2 −3
Original line number Diff line number Diff line
@@ -535,8 +535,7 @@ static struct xenbus_driver blkback = {
};


void blkif_xenbus_init(void)
int blkif_xenbus_init(void)
{
	/* XXX must_check */
	(void)xenbus_register_backend(&blkback);
	return xenbus_register_backend(&blkback);
}