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(+)
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index cf8cccfefb51..1cf43073845a 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -1074,6 +1074,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;
}
@@ -2895,6 +2896,7 @@ struct sock *mptcp_sk_clone(const struct sock *sk,
msk->snd_una = msk->write_seq;
msk->wnd_end = msk->snd_nxt + req->rsk_rcv_wnd;
msk->setsockopt_seq = mptcp_sk(sk)->setsockopt_seq;
+ msk->last_fully_acked_dss_start_seq = subflow_req->idsn - 1;
if (mp_opt->suboptions & OPTIONS_MPTCP_MPC) {
msk->can_ack = true;
@@ -3151,6 +3153,7 @@ void mptcp_finish_connect(struct sock *ssk)
WRITE_ONCE(msk->rcv_wnd_sent, ack_seq);
WRITE_ONCE(msk->can_ack, 1);
WRITE_ONCE(msk->snd_una, msk->write_seq);
+ WRITE_ONCE(msk->last_fully_acked_dss_start_seq, subflow->idsn - 1);
mptcp_pm_new_connection(msk, ssk, 0);
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index e090a9244f8b..e9064fec0ed2 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -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;
--
2.31.1