From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============1378708838436497065==" MIME-Version: 1.0 From: Paolo Abeni To: mptcp at lists.01.org Subject: [MPTCP] [PATCH v3 06/13] mptcp: add accounting for pending data Date: Fri, 02 Oct 2020 11:26:16 +0200 Message-ID: <945cb8399b037aa1dbaaed8ce59c6e516aac9f0c.1601630384.git.pabeni@redhat.com> In-Reply-To: cover.1601630384.git.pabeni@redhat.com X-Status: X-Keywords: X-UID: 6156 --===============1378708838436497065== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Preparation patch to track the data pending in the msk write queue. No functional change introduced here Signed-off-by: Paolo Abeni --- net/mptcp/protocol.c | 1 + net/mptcp/protocol.h | 38 +++++++++++++++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 82385a1295eb..26f520450cca 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1831,6 +1831,7 @@ static int __mptcp_init_sock(struct sock *sk) __set_bit(MPTCP_SEND_SPACE, &msk->flags); INIT_WORK(&msk->work, mptcp_worker); msk->out_of_order_queue =3D RB_ROOT; + msk->first_pending =3D NULL; = msk->first =3D NULL; inet_csk(sk)->icsk_sync_mss =3D mptcp_sync_mss; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 50585311998c..683497e0375e 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -186,9 +186,10 @@ struct mptcp_pm_data { struct mptcp_data_frag { struct list_head list; u64 data_seq; - int data_len; - int offset; - int overhead; + u16 data_len; + u16 offset; + u16 overhead; + u16 already_sent; struct page *page; }; = @@ -217,6 +218,7 @@ struct mptcp_sock { struct rb_root out_of_order_queue; struct list_head conn_list; struct list_head rtx_queue; + struct mptcp_data_frag *first_pending; struct list_head join_list; struct skb_ext *cached_ext; /* for the next sendmsg */ struct socket *subflow; /* outgoing connect/listener/!mp_capable */ @@ -238,6 +240,36 @@ static inline struct mptcp_sock *mptcp_sk(const struct= sock *sk) return (struct mptcp_sock *)sk; } = +static inline struct mptcp_data_frag *mptcp_send_head(const struct sock *s= k) +{ + const struct mptcp_sock *msk =3D mptcp_sk(sk); + + return READ_ONCE(msk->first_pending); +} + +static inline struct mptcp_data_frag *mptcp_send_next(struct sock *sk) +{ + struct mptcp_sock *msk =3D mptcp_sk(sk); + struct mptcp_data_frag *cur; + + cur =3D msk->first_pending; + return list_is_last(&cur->list, &msk->rtx_queue) ? NULL : + list_next_entry(cur, list); +} + +static inline struct mptcp_data_frag *mptcp_pending_tail(const struct sock= *sk) +{ + struct mptcp_sock *msk =3D mptcp_sk(sk); + + if (!msk->first_pending) + return NULL; + + if (WARN_ON_ONCE(list_empty(&msk->rtx_queue))) + return NULL; + + return list_last_entry(&msk->rtx_queue, struct mptcp_data_frag, list); +} + static inline struct mptcp_data_frag *mptcp_rtx_tail(const struct sock *sk) { struct mptcp_sock *msk =3D mptcp_sk(sk); -- = 2.26.2 --===============1378708838436497065==--