24ac3a08e6
The recent poll change may lead to stalls for non-blocking connecting
SMC sockets, since sock_poll_wait is no longer performed on the
internal CLC socket, but on the outer SMC socket. kernel_connect() on
the internal CLC socket returns with -EINPROGRESS, but the wake up
logic does not work in all cases. If the internal CLC socket is still
in state TCP_SYN_SENT when polled, sock_poll_wait() from sock_poll()
does not sleep. It is supposed to sleep till the state of the internal
CLC socket switches to TCP_ESTABLISHED.
This problem triggered a redesign of the SMC nonblocking connect logic.
This patch introduces a connect worker covering all connect steps
followed by a wake up of socket waiters. It allows to get rid of all
delays and locks in smc_poll().
Fixes:
|
||
---|---|---|
.. | ||
af_smc.c | ||
Kconfig | ||
Makefile | ||
smc_cdc.c | ||
smc_cdc.h | ||
smc_clc.c | ||
smc_clc.h | ||
smc_close.c | ||
smc_close.h | ||
smc_core.c | ||
smc_core.h | ||
smc_diag.c | ||
smc_ib.c | ||
smc_ib.h | ||
smc_llc.c | ||
smc_llc.h | ||
smc_pnet.c | ||
smc_pnet.h | ||
smc_rx.c | ||
smc_rx.h | ||
smc_tx.c | ||
smc_tx.h | ||
smc_wr.c | ||
smc_wr.h | ||
smc.h |