aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hv/channel.c')
-rw-r--r--drivers/hv/channel.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
index 1ef37c727572..d037454fe7b8 100644
--- a/drivers/hv/channel.c
+++ b/drivers/hv/channel.c
@@ -73,7 +73,6 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size,
73 void *in, *out; 73 void *in, *out;
74 unsigned long flags; 74 unsigned long flags;
75 int ret, err = 0; 75 int ret, err = 0;
76 unsigned long t;
77 struct page *page; 76 struct page *page;
78 77
79 spin_lock_irqsave(&newchannel->lock, flags); 78 spin_lock_irqsave(&newchannel->lock, flags);
@@ -183,11 +182,7 @@ int vmbus_open(struct vmbus_channel *newchannel, u32 send_ringbuffer_size,
183 goto error1; 182 goto error1;
184 } 183 }
185 184
186 t = wait_for_completion_timeout(&open_info->waitevent, 5*HZ); 185 wait_for_completion(&open_info->waitevent);
187 if (t == 0) {
188 err = -ETIMEDOUT;
189 goto error1;
190 }
191 186
192 spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags); 187 spin_lock_irqsave(&vmbus_connection.channelmsg_lock, flags);
193 list_del(&open_info->msglistentry); 188 list_del(&open_info->msglistentry);
@@ -375,7 +370,7 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,
375 struct vmbus_channel_gpadl_header *gpadlmsg; 370 struct vmbus_channel_gpadl_header *gpadlmsg;
376 struct vmbus_channel_gpadl_body *gpadl_body; 371 struct vmbus_channel_gpadl_body *gpadl_body;
377 struct vmbus_channel_msginfo *msginfo = NULL; 372 struct vmbus_channel_msginfo *msginfo = NULL;
378 struct vmbus_channel_msginfo *submsginfo; 373 struct vmbus_channel_msginfo *submsginfo, *tmp;
379 u32 msgcount; 374 u32 msgcount;
380 struct list_head *curr; 375 struct list_head *curr;
381 u32 next_gpadl_handle; 376 u32 next_gpadl_handle;
@@ -437,6 +432,13 @@ cleanup:
437 list_del(&msginfo->msglistentry); 432 list_del(&msginfo->msglistentry);
438 spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags); 433 spin_unlock_irqrestore(&vmbus_connection.channelmsg_lock, flags);
439 434
435 if (msgcount > 1) {
436 list_for_each_entry_safe(submsginfo, tmp, &msginfo->submsglist,
437 msglistentry) {
438 kfree(submsginfo);
439 }
440 }
441
440 kfree(msginfo); 442 kfree(msginfo);
441 return ret; 443 return ret;
442} 444}