diff options
author | Vitaly Kuznetsov <vkuznets@redhat.com> | 2017-03-04 18:13:59 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-03-16 16:42:00 +0900 |
commit | e9c18ae6eb2b312f16c63e34b43ea23926daa398 (patch) | |
tree | 78bd2c2344d415e4fb95b1c8964508c59dfbc724 /drivers/hv/hv_utils_transport.h | |
parent | dad72a1d28442b03aac86836a42de2d00a1014ab (diff) | |
download | linux-e9c18ae6eb2b312f16c63e34b43ea23926daa398.tar.gz linux-e9c18ae6eb2b312f16c63e34b43ea23926daa398.tar.bz2 linux-e9c18ae6eb2b312f16c63e34b43ea23926daa398.zip |
Drivers: hv: util: move waiting for release to hv_utils_transport itself
Waiting for release_event in all three drivers introduced issues on release
as on_reset() hook is not always called. E.g. if the device was never
opened we will never get the completion.
Move the waiting code to hvutil_transport_destroy() and make sure it is
only called when the device is open. hvt->lock serialization should
guarantee the absence of races.
Fixes: 5a66fecbf6aa ("Drivers: hv: util: kvp: Fix a rescind processing issue")
Fixes: 20951c7535b5 ("Drivers: hv: util: Fcopy: Fix a rescind processing issue")
Fixes: d77044d142e9 ("Drivers: hv: util: Backup: Fix a rescind processing issue")
Reported-by: Dexuan Cui <decui@microsoft.com>
Tested-by: Dexuan Cui <decui@microsoft.com>
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>
Diffstat (limited to 'drivers/hv/hv_utils_transport.h')
-rw-r--r-- | drivers/hv/hv_utils_transport.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/hv/hv_utils_transport.h b/drivers/hv/hv_utils_transport.h index d98f5225c3e6..79afb626e166 100644 --- a/drivers/hv/hv_utils_transport.h +++ b/drivers/hv/hv_utils_transport.h @@ -41,6 +41,7 @@ struct hvutil_transport { int outmsg_len; /* its length */ wait_queue_head_t outmsg_q; /* poll/read wait queue */ struct mutex lock; /* protects struct members */ + struct completion release; /* synchronize with fd release */ }; struct hvutil_transport *hvutil_transport_init(const char *name, |