From: Jon M. <jm...@re...> - 2021-08-10 18:49:20
|
On 03/08/2021 22:27, Xin Long wrote: > __tipc_sendmsg() is called to send SYN packet by either tipc_sendmsg() > or tipc_connect(). The difference is in tipc_connect(), it will call > tipc_wait_for_connect() after __tipc_sendmsg() to wait until connecting > is done. So there's no need to wait in __tipc_sendmsg() for this case. > > This patch is to fix it by calling tipc_wait_for_connect() only when dlen > is not 0 in __tipc_sendmsg(), which means it's called by tipc_connect(). > > Note this also fixes the failure in tipcutils/test/ptts/: > > # ./tipcTS & > # ./tipcTC 9 > (hang) > > Fixes: 36239dab6da7 ("tipc: fix implicit-connect for SYN+") > Reported-by: Shuang Li <sh...@re...> > Signed-off-by: Xin Long <luc...@gm...> > --- > net/tipc/socket.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/net/tipc/socket.c b/net/tipc/socket.c > index 75b99b7eda22..8754bd885169 100644 > --- a/net/tipc/socket.c > +++ b/net/tipc/socket.c > @@ -1518,7 +1518,7 @@ static int __tipc_sendmsg(struct socket *sock, struct msghdr *m, size_t dlen) > > if (unlikely(syn && !rc)) { > tipc_set_sk_state(sk, TIPC_CONNECTING); > - if (timeout) { > + if (dlen && timeout) { > timeout = msecs_to_jiffies(timeout); > tipc_wait_for_connect(sock, &timeout); > } > Acked-by: Jon Maloy <jm...@re...> |