Acked-by: Jon Maloy <jon.ma...@ericsson.se> Thanks, Partha. ///jon
> -----Original Message----- > From: Parthasarathy Bhuvaragan <parthasarathy.bhuvara...@gmail.com> > Sent: 8-May-19 04:52 > To: tipc-discussion@lists.sourceforge.net; Jon Maloy > <jon.ma...@ericsson.com>; ying....@windriver.com > Cc: Parthasarathy Bhuvaragan <parthasarathy.bhuvara...@gmail.com> > Subject: [PATCH net v1] tipc: fix hanging clients using poll with EPOLLOUT > flag > > commit 517d7c79bdb398 ("tipc: fix hanging poll() for stream sockets") > introduced a regression for clients using non-blocking sockets. > After the commit, we send EPOLLOUT event to the client even in > TIPC_CONNECTING state. This causes the subsequent send() to fail with > ENOTCONN, as the socket is still not in TIPC_ESTABLISHED state. > > In this commit, we: > - improve the fix for hanging poll() by replacing sk_data_ready() > with sk_state_change() to wake up all clients. > - revert the faulty updates introduced by commit 517d7c79bdb398 > ("tipc: fix hanging poll() for stream sockets"). > > Fixes: 517d7c79bdb398 ("tipc: fix hanging poll() for stream sockets") > Signed-off-by: Parthasarathy Bhuvaragan > <parthasarathy.bhuvara...@gmail.com> > --- > net/tipc/socket.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/net/tipc/socket.c b/net/tipc/socket.c index > b542f14ed444..2851937f6e32 100644 > --- a/net/tipc/socket.c > +++ b/net/tipc/socket.c > @@ -734,11 +734,11 @@ static __poll_t tipc_poll(struct file *file, struct > socket *sock, > > switch (sk->sk_state) { > case TIPC_ESTABLISHED: > - case TIPC_CONNECTING: > if (!tsk->cong_link_cnt && !tsk_conn_cong(tsk)) > revents |= EPOLLOUT; > /* fall through */ > case TIPC_LISTEN: > + case TIPC_CONNECTING: > if (!skb_queue_empty(&sk->sk_receive_queue)) > revents |= EPOLLIN | EPOLLRDNORM; > break; > @@ -2041,7 +2041,7 @@ static bool tipc_sk_filter_connect(struct tipc_sock > *tsk, struct sk_buff *skb) > if (msg_data_sz(hdr)) > return true; > /* Empty ACK-, - wake up sleeping connect() and > drop */ > - sk->sk_data_ready(sk); > + sk->sk_state_change(sk); > msg_set_dest_droppable(hdr, 1); > return false; > } > -- > 2.21.0 _______________________________________________ tipc-discussion mailing list tipc-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tipc-discussion