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: Hans Wippel <hwippel@linux.ibm.com> Signed-off-by: Ursula Braun <ubraun@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
1e2b1046b5
Коммит
f07920ad9c
|
@ -127,6 +127,8 @@ static int smc_release(struct socket *sock)
|
|||
smc = smc_sk(sk);
|
||||
|
||||
/* 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);
|
||||
kfree(smc->connect_info);
|
||||
smc->connect_info = NULL;
|
||||
|
|
Загрузка…
Ссылка в новой задаче