diff options
author | K. Y. Srinivasan <kys@microsoft.com> | 2015-02-28 14:18:16 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-03-01 22:31:02 -0500 |
commit | d15a0301c4157884d1a48a5d76b9ac3e36d71242 (patch) | |
tree | 8604ba0a730d1610743b1dc4818564cac4a602b3 /drivers/hv/vmbus_drv.c | |
parent | 04653a009a63d6a91c60a5449ea97e3ed5e1dc29 (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.c | 15 |
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 | */ |
509 | static int vmbus_remove(struct device *child_device) | 509 | static 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 | } |