Message ID | ddf6d9178e3fa8b2646d8b7b9fb5e091ebf07833.1710748923.git.tanggeliang@kylinos.cn (mailing list archive) |
---|---|
State | Superseded, archived |
Delegated to: | Mat Martineau |
Headers | show |
Series | display "last time" actions info | expand |
Context | Check | Description |
---|---|---|
matttbe/build | success | Build and static analysis OK |
matttbe/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 39 lines checked |
matttbe/shellcheck | success | MPTCP selftests files have not been modified |
matttbe/KVM_Validation__normal | success | Success! ✅ |
matttbe/KVM_Validation__debug | warning | Unstable: 2 failed test(s): packetdrill_sockopts selftest_mptcp_join |
matttbe/KVM_Validation__btf__only_bpftest_all_ | success | Success! ✅ |
On Mon, 18 Mar 2024, Geliang Tang wrote: > From: Geliang Tang <tanggeliang@kylinos.cn> > > This patch adds "last time" fields last_data_sent, last_data_recv and > last_ack_recv in struct mptcp_sock to record the last time data_sent, > data_recv and ack_recv happened. They all are initialized as > tcp_jiffies32 in __mptcp_init_sock(), but updated as tcp_jiffies32 too > when data is sent in __subflow_push_pending(), data is received in > mptcp_recvmsg(), and ack is received in ack_update_msk(). > > Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> > --- > net/mptcp/options.c | 1 + > net/mptcp/protocol.c | 5 +++++ > net/mptcp/protocol.h | 3 +++ > 3 files changed, 9 insertions(+) > > diff --git a/net/mptcp/options.c b/net/mptcp/options.c > index 5926955625cf..c0832df3b0a3 100644 > --- a/net/mptcp/options.c > +++ b/net/mptcp/options.c > @@ -1069,6 +1069,7 @@ static void ack_update_msk(struct mptcp_sock *msk, > __mptcp_snd_una_update(msk, new_snd_una); > __mptcp_data_acked(sk); > } > + msk->last_ack_recv = tcp_jiffies32; > mptcp_data_unlock(sk); > > trace_ack_update_msk(mp_opt->data_ack, > diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c > index cdf9ec67795e..a6b5c6492e9b 100644 > --- a/net/mptcp/protocol.c > +++ b/net/mptcp/protocol.c > @@ -1556,6 +1556,7 @@ static int __subflow_push_pending(struct sock *sk, struct sock *ssk, > err = copied; > > out: > + msk->last_data_sent = tcp_jiffies32; Hi Geliang - I think msk->last_data_sent should only be updated if err > 0. > return err; > } > > @@ -2262,6 +2263,7 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, > skb_queue_empty(&msk->receive_queue), copied); > if (!(flags & MSG_PEEK)) > mptcp_rcv_space_adjust(msk, copied); > + msk->last_data_recv = tcp_jiffies32; This is too late in the receive process, to be comparable to TCP I think this timestamp should be set in __mptcp_move_skbs_from_subflow(). - Mat > > release_sock(sk); > return copied; > @@ -2793,6 +2795,9 @@ static void __mptcp_init_sock(struct sock *sk) > WRITE_ONCE(msk->allow_infinite_fallback, true); > msk->recovery = false; > msk->subflow_id = 1; > + msk->last_data_sent = tcp_jiffies32; > + msk->last_data_recv = tcp_jiffies32; > + msk->last_ack_recv = tcp_jiffies32; > > mptcp_pm_data_init(msk); > > diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h > index 5a4538205fd6..3a3fed3642dd 100644 > --- a/net/mptcp/protocol.h > +++ b/net/mptcp/protocol.h > @@ -282,6 +282,9 @@ struct mptcp_sock { > u64 bytes_acked; > u64 snd_una; > u64 wnd_end; > + u32 last_data_sent; > + u32 last_data_recv; > + u32 last_ack_recv; > unsigned long timer_ival; > u32 token; > int rmem_released; > -- > 2.40.1 > > >
diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 5926955625cf..c0832df3b0a3 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1069,6 +1069,7 @@ static void ack_update_msk(struct mptcp_sock *msk, __mptcp_snd_una_update(msk, new_snd_una); __mptcp_data_acked(sk); } + msk->last_ack_recv = tcp_jiffies32; mptcp_data_unlock(sk); trace_ack_update_msk(mp_opt->data_ack, diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index cdf9ec67795e..a6b5c6492e9b 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1556,6 +1556,7 @@ static int __subflow_push_pending(struct sock *sk, struct sock *ssk, err = copied; out: + msk->last_data_sent = tcp_jiffies32; return err; } @@ -2262,6 +2263,7 @@ static int mptcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, skb_queue_empty(&msk->receive_queue), copied); if (!(flags & MSG_PEEK)) mptcp_rcv_space_adjust(msk, copied); + msk->last_data_recv = tcp_jiffies32; release_sock(sk); return copied; @@ -2793,6 +2795,9 @@ static void __mptcp_init_sock(struct sock *sk) WRITE_ONCE(msk->allow_infinite_fallback, true); msk->recovery = false; msk->subflow_id = 1; + msk->last_data_sent = tcp_jiffies32; + msk->last_data_recv = tcp_jiffies32; + msk->last_ack_recv = tcp_jiffies32; mptcp_pm_data_init(msk); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 5a4538205fd6..3a3fed3642dd 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -282,6 +282,9 @@ struct mptcp_sock { u64 bytes_acked; u64 snd_una; u64 wnd_end; + u32 last_data_sent; + u32 last_data_recv; + u32 last_ack_recv; unsigned long timer_ival; u32 token; int rmem_released;