@@ -1071,6 +1071,7 @@ static void __mptcp_clean_una(struct sock *sk)
WRITE_ONCE(msk->first_pending, mptcp_send_next(sk));
}
+ msk->last_fully_acked_dss_start_seq = dfrag->data_seq;
dfrag_clear(sk, dfrag);
cleaned = true;
}
@@ -2899,6 +2900,7 @@ struct sock *mptcp_sk_clone(const struct sock *sk,
msk->wnd_end = msk->snd_nxt + req->rsk_rcv_wnd;
msk->setsockopt_seq = mptcp_sk(sk)->setsockopt_seq;
msk->last_retrans_seq = subflow_req->idsn - 1;
+ msk->last_fully_acked_dss_start_seq = subflow_req->idsn - 1;
if (mp_opt->suboptions & OPTIONS_MPTCP_MPC) {
msk->can_ack = true;
@@ -3156,6 +3158,7 @@ void mptcp_finish_connect(struct sock *ssk)
WRITE_ONCE(msk->can_ack, 1);
WRITE_ONCE(msk->snd_una, msk->write_seq);
WRITE_ONCE(msk->last_retrans_seq, subflow->idsn - 1);
+ WRITE_ONCE(msk->last_fully_acked_dss_start_seq, subflow->idsn - 1);
mptcp_pm_new_connection(msk, ssk, 0);
@@ -224,6 +224,7 @@ struct mptcp_sock {
u64 remote_key;
u64 write_seq;
u64 snd_nxt;
+ u64 last_fully_acked_dss_start_seq;
u64 ack_seq;
u64 rcv_wnd_sent;
u64 rcv_data_fin_seq;
This patch added a new member named last_fully_acked_dss_start_seq to the msk to keep track of the beginning of the last fully-acked data segment. This would be updated in __mptcp_clean_una. Signed-off-by: Geliang Tang <geliangtang@gmail.com> --- net/mptcp/protocol.c | 3 +++ net/mptcp/protocol.h | 1 + 2 files changed, 4 insertions(+)