@@ -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