@@ -834,7 +834,7 @@ static void mptcp_clean_una(struct sock *sk)
834834	 * plain TCP 
835835	 */ 
836836	if  (__mptcp_check_fallback (msk ))
837- 		atomic64_set (& msk -> snd_una , msk -> write_seq );
837+ 		atomic64_set (& msk -> snd_una , msk -> snd_nxt );
838838	snd_una  =  atomic64_read (& msk -> snd_una );
839839
840840	list_for_each_entry_safe (dfrag , dtmp , & msk -> rtx_queue , list ) {
@@ -1338,6 +1338,7 @@ static int mptcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
13381338
13391339	release_sock (ssk );
13401340out :
1341+ 	msk -> snd_nxt  =  msk -> write_seq ;
13411342	ssk_check_wmem (msk );
13421343	release_sock (sk );
13431344	return  copied  ? : ret ;
@@ -1629,7 +1630,7 @@ static void mptcp_retransmit_handler(struct sock *sk)
16291630{
16301631	struct  mptcp_sock  * msk  =  mptcp_sk (sk );
16311632
1632- 	if  (atomic64_read (& msk -> snd_una ) ==  READ_ONCE (msk -> write_seq )) {
1633+ 	if  (atomic64_read (& msk -> snd_una ) ==  READ_ONCE (msk -> snd_nxt )) {
16331634		mptcp_stop_timer (sk );
16341635	} else  {
16351636		set_bit (MPTCP_WORK_RTX , & msk -> flags );
@@ -2100,6 +2101,7 @@ struct sock *mptcp_sk_clone(const struct sock *sk,
21002101	WRITE_ONCE (msk -> fully_established , false);
21012102
21022103	msk -> write_seq  =  subflow_req -> idsn  +  1 ;
2104+ 	msk -> snd_nxt  =  msk -> write_seq ;
21032105	atomic64_set (& msk -> snd_una , msk -> write_seq );
21042106	if  (mp_opt -> mp_capable ) {
21052107		msk -> can_ack  =  true;
@@ -2409,6 +2411,7 @@ void mptcp_finish_connect(struct sock *ssk)
24092411	WRITE_ONCE (msk -> remote_key , subflow -> remote_key );
24102412	WRITE_ONCE (msk -> local_key , subflow -> local_key );
24112413	WRITE_ONCE (msk -> write_seq , subflow -> idsn  +  1 );
2414+ 	WRITE_ONCE (msk -> snd_nxt , msk -> write_seq );
24122415	WRITE_ONCE (msk -> ack_seq , ack_seq );
24132416	WRITE_ONCE (msk -> can_ack , 1 );
24142417	atomic64_set (& msk -> snd_una , msk -> write_seq );
0 commit comments