diff options
Diffstat (limited to 'drivers/hv/channel.c')
-rw-r--r-- | drivers/hv/channel.c | 16 |
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 | } |