diff options
Diffstat (limited to 'net/mptcp/protocol.c')
| -rw-r--r-- | net/mptcp/protocol.c | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 7d44196ec5b6..bb7dca8aa2d9 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -2916,9 +2916,14 @@ void mptcp_set_state(struct sock *sk, int state)  		if (oldstate != TCP_ESTABLISHED)  			MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_CURRESTAB);  		break; - +	case TCP_CLOSE_WAIT: +		/* Unlike TCP, MPTCP sk would not have the TCP_SYN_RECV state: +		 * MPTCP "accepted" sockets will be created later on. So no +		 * transition from TCP_SYN_RECV to TCP_CLOSE_WAIT. +		 */ +		break;  	default: -		if (oldstate == TCP_ESTABLISHED) +		if (oldstate == TCP_ESTABLISHED || oldstate == TCP_CLOSE_WAIT)  			MPTCP_DEC_STATS(sock_net(sk), MPTCP_MIB_CURRESTAB);  	} @@ -3735,6 +3740,7 @@ static int mptcp_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)  	WRITE_ONCE(msk->write_seq, subflow->idsn);  	WRITE_ONCE(msk->snd_nxt, subflow->idsn); +	WRITE_ONCE(msk->snd_una, subflow->idsn);  	if (likely(!__mptcp_check_fallback(msk)))  		MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPCAPABLEACTIVE);  | 
