diff options
Diffstat (limited to 'net/rds/tcp_connect.c')
| -rw-r--r-- | net/rds/tcp_connect.c | 5 | 
1 files changed, 3 insertions, 2 deletions
diff --git a/net/rds/tcp_connect.c b/net/rds/tcp_connect.c index d6839d96d539..cbe08a1fa4c7 100644 --- a/net/rds/tcp_connect.c +++ b/net/rds/tcp_connect.c @@ -66,7 +66,7 @@ void rds_tcp_state_change(struct sock *sk)  		 * RDS connection as RDS_CONN_UP until the reconnect,  		 * to avoid RDS datagram loss.  		 */ -		if (cp->cp_conn->c_laddr > cp->cp_conn->c_faddr && +		if (!IS_CANONICAL(cp->cp_conn->c_laddr, cp->cp_conn->c_faddr) &&  		    rds_conn_path_transition(cp, RDS_CONN_CONNECTING,  					     RDS_CONN_ERROR)) {  			rds_conn_path_drop(cp); @@ -135,7 +135,6 @@ int rds_tcp_conn_path_connect(struct rds_conn_path *cp)  	ret = sock->ops->connect(sock, (struct sockaddr *)&dest, sizeof(dest),  				 O_NONBLOCK); -	cp->cp_outgoing = 1;  	rdsdebug("connect to address %pI4 returned %d\n", &conn->c_faddr, ret);  	if (ret == -EINPROGRESS)  		ret = 0; @@ -171,6 +170,8 @@ void rds_tcp_conn_path_shutdown(struct rds_conn_path *cp)  		 cp->cp_conn, tc, sock);  	if (sock) { +		if (cp->cp_conn->c_destroy_in_prog) +			rds_tcp_set_linger(sock);  		sock->ops->shutdown(sock, RCV_SHUTDOWN | SEND_SHUTDOWN);  		lock_sock(sock->sk);  		rds_tcp_restore_callbacks(sock, tc); /* tc->tc_sock = NULL */  | 
