From 5d48a1c20268871395299672dce5c1989c9c94e4 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Mon, 27 Jul 2009 16:47:36 -0400 Subject: [PATCH] Staging: hv: check return value of device_register() Signed-off-by: Bill Pemberton Cc: Hank Janssen Signed-off-by: Greg Kroah-Hartman --- drivers/staging/hv/blkvsc_drv.c | 2 +- drivers/staging/hv/include/vmbus.h | 3 +-- drivers/staging/hv/netvsc_drv.c | 2 +- drivers/staging/hv/storvsc_drv.c | 2 +- drivers/staging/hv/vmbus_drv.c | 20 +++++++++++++++++--- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c index 5322e570bd8c..f1efc3e65c1f 100644 --- a/drivers/staging/hv/blkvsc_drv.c +++ b/drivers/staging/hv/blkvsc_drv.c @@ -192,7 +192,7 @@ int blkvsc_drv_init(PFN_DRIVERINITIALIZE pfn_drv_init) drv_ctx->shutdown = blkvsc_shutdown; /* The driver belongs to vmbus */ - vmbus_child_driver_register(drv_ctx); + ret = vmbus_child_driver_register(drv_ctx); DPRINT_EXIT(BLKVSC_DRV); diff --git a/drivers/staging/hv/include/vmbus.h b/drivers/staging/hv/include/vmbus.h index 463f77ef3cd9..c1a8c553edaa 100644 --- a/drivers/staging/hv/include/vmbus.h +++ b/drivers/staging/hv/include/vmbus.h @@ -82,8 +82,7 @@ static inline struct driver_context *driver_to_driver_context(struct device_driv /* Vmbus interface */ -void -vmbus_child_driver_register( +int vmbus_child_driver_register( struct driver_context* driver_ctx ); diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c index 8cf552a33e53..82f77008b9b5 100644 --- a/drivers/staging/hv/netvsc_drv.c +++ b/drivers/staging/hv/netvsc_drv.c @@ -114,7 +114,7 @@ int netvsc_drv_init(PFN_DRIVERINITIALIZE pfn_drv_init) drv_ctx->remove = netvsc_remove; /* The driver belongs to vmbus */ - vmbus_child_driver_register(drv_ctx); + ret = vmbus_child_driver_register(drv_ctx); DPRINT_EXIT(NETVSC_DRV); diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c index 3c677f015c47..cbea8a2f0541 100644 --- a/drivers/staging/hv/storvsc_drv.c +++ b/drivers/staging/hv/storvsc_drv.c @@ -162,7 +162,7 @@ int storvsc_drv_init(PFN_DRIVERINITIALIZE pfn_drv_init) drv_ctx->remove = storvsc_remove; /* The driver belongs to vmbus */ - vmbus_child_driver_register(drv_ctx); + ret = vmbus_child_driver_register(drv_ctx); DPRINT_EXIT(STORVSC_DRV); diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c index cede0ace9ad5..fd6f18e148d1 100644 --- a/drivers/staging/hv/vmbus_drv.c +++ b/drivers/staging/hv/vmbus_drv.c @@ -435,7 +435,18 @@ int vmbus_bus_init(PFN_DRIVERINITIALIZE pfn_drv_init) dev_ctx->device.release = vmbus_bus_release; /* Setup the bus as root device */ - device_register(&dev_ctx->device); + ret = device_register(&dev_ctx->device); + if (ret) + { + DPRINT_ERR(VMBUS_DRV, "ERROR - Unable to register vmbus root device"); + + free_irq(vmbus_irq, NULL); + bus_unregister(&vmbus_drv_ctx->bus); + + ret = -1; + goto cleanup; + } + vmbus_drv_obj->GetChannelOffers(); @@ -491,9 +502,10 @@ Name: vmbus_child_driver_register() Desc: Register a vmbus's child driver --*/ -void vmbus_child_driver_register(struct driver_context* driver_ctx) +int vmbus_child_driver_register(struct driver_context* driver_ctx) { VMBUS_DRIVER_OBJECT *vmbus_drv_obj=&g_vmbus_drv.drv_obj; + int ret; DPRINT_ENTER(VMBUS_DRV); @@ -502,11 +514,13 @@ void vmbus_child_driver_register(struct driver_context* driver_ctx) /* The child driver on this vmbus */ driver_ctx->driver.bus = &g_vmbus_drv.bus; - driver_register(&driver_ctx->driver); + ret = driver_register(&driver_ctx->driver); vmbus_drv_obj->GetChannelOffers(); DPRINT_EXIT(VMBUS_DRV); + + return ret; } EXPORT_SYMBOL(vmbus_child_driver_register); -- 2.20.1