| From 66be653083057358724d56d817e870e53fb81ca7 Mon Sep 17 00:00:00 2001 |
| From: "K. Y. Srinivasan" <kys@microsoft.com> |
| Date: Wed, 27 Aug 2014 16:25:32 -0700 |
| Subject: Drivers: hv: vmbus: Cleanup vmbus_teardown_gpadl() |
| |
| From: "K. Y. Srinivasan" <kys@microsoft.com> |
| |
| commit 66be653083057358724d56d817e870e53fb81ca7 upstream. |
| |
| Eliminate calls to BUG_ON() by properly handling errors. In cases where |
| rollback is possible, we will return the appropriate error to have the |
| calling code decide how to rollback state. In the case where we are |
| transferring ownership of the guest physical pages to the host, |
| we will wait for the host to respond. |
| |
| Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> |
| Tested-by: Sitsofe Wheeler <sitsofe@yahoo.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/hv/channel.c | 11 ++++++----- |
| 1 file changed, 6 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/hv/channel.c |
| +++ b/drivers/hv/channel.c |
| @@ -464,7 +464,7 @@ int vmbus_teardown_gpadl(struct vmbus_ch |
| struct vmbus_channel_gpadl_teardown *msg; |
| struct vmbus_channel_msginfo *info; |
| unsigned long flags; |
| - int ret, t; |
| + int ret; |
| |
| info = kmalloc(sizeof(*info) + |
| sizeof(struct vmbus_channel_gpadl_teardown), GFP_KERNEL); |
| @@ -486,11 +486,12 @@ int vmbus_teardown_gpadl(struct vmbus_ch |
| ret = vmbus_post_msg(msg, |
| sizeof(struct vmbus_channel_gpadl_teardown)); |
| |
| - BUG_ON(ret != 0); |
| - t = wait_for_completion_timeout(&info->waitevent, 5*HZ); |
| - BUG_ON(t == 0); |
| + if (ret) |
| + goto post_msg_err; |
| |
| - /* Received a torndown response */ |
| + wait_for_completion(&info->waitevent); |
| + |
| +post_msg_err: |
| spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags); |
| list_del(&info->msglistentry); |
| spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags); |