| From abd1026da4a7700a8db370947f75cd17b6ae6f76 Mon Sep 17 00:00:00 2001 |
| From: Vitaly Kuznetsov <vkuznets@redhat.com> |
| Date: Sat, 3 Dec 2016 12:34:32 -0800 |
| Subject: hv: acquire vmbus_connection.channel_mutex in vmbus_free_channels() |
| |
| From: Vitaly Kuznetsov <vkuznets@redhat.com> |
| |
| commit abd1026da4a7700a8db370947f75cd17b6ae6f76 upstream. |
| |
| "kernel BUG at drivers/hv/channel_mgmt.c:350!" is observed when hv_vmbus |
| module is unloaded. BUG_ON() was introduced in commit 85d9aa705184 |
| ("Drivers: hv: vmbus: add an API vmbus_hvsock_device_unregister()") as |
| vmbus_free_channels() codepath was apparently forgotten. |
| |
| Fixes: 85d9aa705184 ("Drivers: hv: vmbus: add an API vmbus_hvsock_device_unregister()") |
| |
| Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> |
| Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/hv/channel_mgmt.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/drivers/hv/channel_mgmt.c |
| +++ b/drivers/hv/channel_mgmt.c |
| @@ -348,6 +348,7 @@ void vmbus_free_channels(void) |
| { |
| struct vmbus_channel *channel, *tmp; |
| |
| + mutex_lock(&vmbus_connection.channel_mutex); |
| list_for_each_entry_safe(channel, tmp, &vmbus_connection.chn_list, |
| listentry) { |
| /* hv_process_channel_removal() needs this */ |
| @@ -355,6 +356,7 @@ void vmbus_free_channels(void) |
| |
| vmbus_device_unregister(channel->device_obj); |
| } |
| + mutex_unlock(&vmbus_connection.channel_mutex); |
| } |
| |
| /* |