Messages in this thread Patch in this message | | | From | Stefano Stabellini <> | Subject | [PATCH 2/2] pvcalls-front: wait for other operations to return when release passive sockets | Date | Mon, 5 Feb 2018 14:51:47 -0800 |
| |
Passive sockets can have ongoing operations on them, specifically, we have two wait_event_interruptable calls in pvcalls_front_accept.
Add two wake_up calls in pvcalls_front_release, then wait for the potential waiters to return and release the sock_mapping refcount.
Signed-off-by: Stefano Stabellini <stefano@aporeto.com> --- drivers/xen/pvcalls-front.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/drivers/xen/pvcalls-front.c b/drivers/xen/pvcalls-front.c index 164d3ad..d32cac5 100644 --- a/drivers/xen/pvcalls-front.c +++ b/drivers/xen/pvcalls-front.c @@ -1017,6 +1017,12 @@ int pvcalls_front_release(struct socket *sock) pvcalls_front_free_map(bedata, map); } else { + wake_up(&bedata->inflight_req); + wake_up(&map->passive.inflight_accept_req); + + while (atomic_read(&map->refcount) > 1) + cpu_relax(); + spin_lock(&bedata->socket_lock); list_del(&map->list); spin_unlock(&bedata->socket_lock); -- 1.9.1
| |