aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hv/vmbus_drv.c
diff options
context:
space:
mode:
authorK. Y. Srinivasan <kys@microsoft.com>2015-02-28 14:18:16 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-03-01 22:31:02 -0500
commitd15a0301c4157884d1a48a5d76b9ac3e36d71242 (patch)
tree8604ba0a730d1610743b1dc4818564cac4a602b3 /drivers/hv/vmbus_drv.c
parent04653a009a63d6a91c60a5449ea97e3ed5e1dc29 (diff)
Drivers: hv: vmbus: Properly handle child device remove
Handle the case when the device may be removed when the device has no driver attached to it. Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/hv/vmbus_drv.c')
-rw-r--r--drivers/hv/vmbus_drv.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 6d99aa5c49d6..a12666d075ea 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -508,14 +508,17 @@ static int vmbus_probe(struct device *child_device)
508 */ 508 */
509static int vmbus_remove(struct device *child_device) 509static int vmbus_remove(struct device *child_device)
510{ 510{
511 struct hv_driver *drv = drv_to_hv_drv(child_device->driver); 511 struct hv_driver *drv;
512 struct hv_device *dev = device_to_hv_device(child_device); 512 struct hv_device *dev = device_to_hv_device(child_device);
513 513
514 if (drv->remove) 514 if (child_device->driver) {
515 drv->remove(dev); 515 drv = drv_to_hv_drv(child_device->driver);
516 else 516 if (drv->remove)
517 pr_err("remove not set for driver %s\n", 517 drv->remove(dev);
518 dev_name(child_device)); 518 else
519 pr_err("remove not set for driver %s\n",
520 dev_name(child_device));
521 }
519 522
520 return 0; 523 return 0;
521} 524}