]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sdp: Fix for deadlock between sdp_connect and sdp_destroy_work.
authorEldad Zinger <eldadz@mellanox.co.il>
Thu, 24 Jun 2010 15:27:46 +0000 (18:27 +0300)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 6 Oct 2015 12:05:07 +0000 (05:05 -0700)
Signed-off-by: Eldad Zinger <eldadz@mellanox.co.il>
drivers/infiniband/ulp/sdp/sdp_main.c

index 65b57125637f0ceeee028b307f12f097922b183d..9acff248984ebdbdd3d53440f1b9b052eb846dc1 100644 (file)
@@ -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;