On 12/21/2016 09:40 PM, Jon Maloy wrote: > In commit 6f00089c7372 ("tipc: remove SS_DISCONNECTING state") the > check for socket type is in the wrong place, causing a closing socket > to always send out a FIN message even when the socket was never > connected. This is normally harmless, since the destination node for > such messages most often is zero, and the message will be dropped, but > it is still a wrong and confusing behavior. > > We fix this in this commit. > Shouldn't this be sent to "net" instead as we are in merge window and let this be applied early? Please add fixes tag: Fixes: 6f00089c7372 ("tipc: remove SS_DISCONNECTING state") > Signed-off-by: Jon Maloy <jon.ma...@ericsson.com> Reviewed-by: Parthasarathy Bhuvaragan <parthasarathy.bhuvara...@ericsson.com>
/Partha > --- > net/tipc/socket.c | 24 +++++++++++++----------- > 1 file changed, 13 insertions(+), 11 deletions(-) > > diff --git a/net/tipc/socket.c b/net/tipc/socket.c > index 333c5da..800caaa 100644 > --- a/net/tipc/socket.c > +++ b/net/tipc/socket.c > @@ -441,15 +441,19 @@ static void __tipc_shutdown(struct socket *sock, int > error) > while ((skb = __skb_dequeue(&sk->sk_receive_queue)) != NULL) { > if (TIPC_SKB_CB(skb)->bytes_read) { > kfree_skb(skb); > - } else { > - if (!tipc_sk_type_connectionless(sk) && > - sk->sk_state != TIPC_DISCONNECTING) { > - tipc_set_sk_state(sk, TIPC_DISCONNECTING); > - tipc_node_remove_conn(net, dnode, tsk->portid); > - } > - tipc_sk_respond(sk, skb, error); > + continue; > + } > + if (!tipc_sk_type_connectionless(sk) && > + sk->sk_state != TIPC_DISCONNECTING) { > + tipc_set_sk_state(sk, TIPC_DISCONNECTING); > + tipc_node_remove_conn(net, dnode, tsk->portid); > } > + tipc_sk_respond(sk, skb, error); > } > + > + if (tipc_sk_type_connectionless(sk)) > + return; > + > if (sk->sk_state != TIPC_DISCONNECTING) { > skb = tipc_msg_create(TIPC_CRITICAL_IMPORTANCE, > TIPC_CONN_MSG, SHORT_H_SIZE, 0, dnode, > @@ -457,10 +461,8 @@ static void __tipc_shutdown(struct socket *sock, int > error) > tsk->portid, error); > if (skb) > tipc_node_xmit_skb(net, skb, dnode, tsk->portid); > - if (!tipc_sk_type_connectionless(sk)) { > - tipc_node_remove_conn(net, dnode, tsk->portid); > - tipc_set_sk_state(sk, TIPC_DISCONNECTING); > - } > + tipc_node_remove_conn(net, dnode, tsk->portid); > + tipc_set_sk_state(sk, TIPC_DISCONNECTING); > } > } > > ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today.http://sdm.link/intel _______________________________________________ tipc-discussion mailing list tipc-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tipc-discussion