From: Vitaly Kuznetsov <[email protected]>

commit 396e287fa2ff46e83ae016cdcb300c3faa3b02f6 upstream.

vmbus_teardown_gpadl() can result in infinite wait when it is called on 5
second timeout in vmbus_open(). The issue is caused by the fact that gpadl
teardown operation won't ever succeed for an opened channel and the timeout
isn't always enough. As a guest, we can always trust the host to respond to
our request (and there is nothing we can do if it doesn't).

Signed-off-by: Vitaly Kuznetsov <[email protected]>
Signed-off-by: K. Y. Srinivasan <[email protected]>
Signed-off-by: Sumit Semwal <[email protected]>
Signed-off-by: Jiri Slaby <[email protected]>
Signed-off-by: Willy Tarreau <[email protected]>
---
 drivers/hv/channel.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index 90d6885..50e6ba9 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -114,7 +114,7 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 
send_ringbuffer_size,
        struct vmbus_channel_msginfo *open_info = NULL;
        void *in, *out;
        unsigned long flags;
-       int ret, t, err = 0;
+       int ret, err = 0;
 
        newchannel->onchannel_callback = onchannelcallback;
        newchannel->channel_callback_context = context;
@@ -204,11 +204,7 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 
send_ringbuffer_size,
                goto error1;
        }
 
-       t = wait_for_completion_timeout(&open_info->waitevent, 5*HZ);
-       if (t == 0) {
-               err = -ETIMEDOUT;
-               goto error1;
-       }
+       wait_for_completion(&open_info->waitevent);
 
 
        if (open_info->response.open_result.status)
-- 
2.8.0.rc2.1.gbe9624a

Reply via email to