@@ -834,7 +834,7 @@ static void mptcp_clean_una(struct sock *sk)
834
834
* plain TCP
835
835
*/
836
836
if (__mptcp_check_fallback (msk ))
837
- atomic64_set (& msk -> snd_una , msk -> write_seq );
837
+ atomic64_set (& msk -> snd_una , msk -> snd_nxt );
838
838
snd_una = atomic64_read (& msk -> snd_una );
839
839
840
840
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)
1338
1338
1339
1339
release_sock (ssk );
1340
1340
out :
1341
+ msk -> snd_nxt = msk -> write_seq ;
1341
1342
ssk_check_wmem (msk );
1342
1343
release_sock (sk );
1343
1344
return copied ? : ret ;
@@ -1629,7 +1630,7 @@ static void mptcp_retransmit_handler(struct sock *sk)
1629
1630
{
1630
1631
struct mptcp_sock * msk = mptcp_sk (sk );
1631
1632
1632
- if (atomic64_read (& msk -> snd_una ) == READ_ONCE (msk -> write_seq )) {
1633
+ if (atomic64_read (& msk -> snd_una ) == READ_ONCE (msk -> snd_nxt )) {
1633
1634
mptcp_stop_timer (sk );
1634
1635
} else {
1635
1636
set_bit (MPTCP_WORK_RTX , & msk -> flags );
@@ -2100,6 +2101,7 @@ struct sock *mptcp_sk_clone(const struct sock *sk,
2100
2101
WRITE_ONCE (msk -> fully_established , false);
2101
2102
2102
2103
msk -> write_seq = subflow_req -> idsn + 1 ;
2104
+ msk -> snd_nxt = msk -> write_seq ;
2103
2105
atomic64_set (& msk -> snd_una , msk -> write_seq );
2104
2106
if (mp_opt -> mp_capable ) {
2105
2107
msk -> can_ack = true;
@@ -2409,6 +2411,7 @@ void mptcp_finish_connect(struct sock *ssk)
2409
2411
WRITE_ONCE (msk -> remote_key , subflow -> remote_key );
2410
2412
WRITE_ONCE (msk -> local_key , subflow -> local_key );
2411
2413
WRITE_ONCE (msk -> write_seq , subflow -> idsn + 1 );
2414
+ WRITE_ONCE (msk -> snd_nxt , msk -> write_seq );
2412
2415
WRITE_ONCE (msk -> ack_seq , ack_seq );
2413
2416
WRITE_ONCE (msk -> can_ack , 1 );
2414
2417
atomic64_set (& msk -> snd_una , msk -> write_seq );
0 commit comments