Commit f07920ad authored by Hans Wippel's avatar Hans Wippel Committed by David S. Miller

net/smc: abort CLC connection in smc_release

In case of a non-blocking SMC socket, the initial CLC handshake is
performed over a blocking TCP connection in a worker. If the SMC socket
is released, smc_release has to wait for the blocking CLC socket
operations (e.g., kernel_connect) inside the worker.

This patch aborts a CLC connection when the respective non-blocking SMC
socket is released to avoid waiting on socket operations or timeouts.
Signed-off-by: default avatarHans Wippel <hwippel@linux.ibm.com>
Signed-off-by: default avatarUrsula Braun <ubraun@linux.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1e2b1046
...@@ -127,6 +127,8 @@ static int smc_release(struct socket *sock) ...@@ -127,6 +127,8 @@ static int smc_release(struct socket *sock)
smc = smc_sk(sk); smc = smc_sk(sk);
/* cleanup for a dangling non-blocking connect */ /* cleanup for a dangling non-blocking connect */
if (smc->connect_info && sk->sk_state == SMC_INIT)
tcp_abort(smc->clcsock->sk, ECONNABORTED);
flush_work(&smc->connect_work); flush_work(&smc->connect_work);
kfree(smc->connect_info); kfree(smc->connect_info);
smc->connect_info = NULL; smc->connect_info = NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment