From 1b3cdb5e4a109b6475cdc459254490b2bf912e8a Mon Sep 17 00:00:00 2001 From: Eldad Zinger Date: Thu, 24 Jun 2010 18:27:46 +0300 Subject: [PATCH] sdp: Fix for deadlock between sdp_connect and sdp_destroy_work. Signed-off-by: Eldad Zinger --- drivers/infiniband/ulp/sdp/sdp_main.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/infiniband/ulp/sdp/sdp_main.c b/drivers/infiniband/ulp/sdp/sdp_main.c index 65b57125637f..9acff248984e 100644 --- a/drivers/infiniband/ulp/sdp/sdp_main.c +++ b/drivers/infiniband/ulp/sdp/sdp_main.c @@ -768,7 +768,14 @@ static int sdp_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) .sin_addr.s_addr = inet_sk(sk)->saddr, }; int rc; + release_sock(sk); flush_workqueue(sdp_wq); + lock_sock(sk); + if (sk->sk_err) { + sdp_warn(sk, "Can't connect, socket marked with error: %d\n", + sk->sk_err); + return -sk->sk_err; + } if (addr_len < sizeof(struct sockaddr_in)) return -EINVAL; -- 2.50.1