mptcp: add mptcp_space_from_win helper
authorGeliang Tang <tanggeliang@kylinos.cn>
Wed, 5 Jun 2024 07:15:41 +0000 (09:15 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 6 Jun 2024 13:13:47 +0000 (15:13 +0200)
As a wrapper of __tcp_space_from_win(), this patch adds a MPTCP dedicated
space_from_win helper mptcp_space_from_win() in protocol.h to paired with
mptcp_win_from_space().

Use it instead of __tcp_space_from_win() in both mptcp_rcv_space_adjust()
and mptcp_set_rcvlowat().

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net/mptcp/protocol.c
net/mptcp/protocol.h
net/mptcp/sockopt.c

index 546c80c..7ce11be 100644 (file)
@@ -2040,7 +2040,7 @@ static void mptcp_rcv_space_adjust(struct mptcp_sock *msk, int copied)
                do_div(grow, msk->rcvq_space.space);
                rcvwin += (grow << 1);
 
-               rcvbuf = min_t(u64, __tcp_space_from_win(scaling_ratio, rcvwin),
+               rcvbuf = min_t(u64, mptcp_space_from_win(sk, rcvwin),
                               READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_rmem[2]));
 
                if (rcvbuf > sk->sk_rcvbuf) {
index 7aa47e2..b11a4e5 100644 (file)
@@ -386,6 +386,11 @@ static inline int mptcp_win_from_space(const struct sock *sk, int space)
        return __tcp_win_from_space(mptcp_sk(sk)->scaling_ratio, space);
 }
 
+static inline int mptcp_space_from_win(const struct sock *sk, int win)
+{
+       return __tcp_space_from_win(mptcp_sk(sk)->scaling_ratio, win);
+}
+
 static inline int __mptcp_space(const struct sock *sk)
 {
        return mptcp_win_from_space(sk, READ_ONCE(sk->sk_rcvbuf) - __mptcp_rmem(sk));
index f9a4fb1..2026a9a 100644 (file)
@@ -1579,7 +1579,7 @@ int mptcp_set_rcvlowat(struct sock *sk, int val)
        if (sk->sk_userlocks & SOCK_RCVBUF_LOCK)
                return 0;
 
-       space = __tcp_space_from_win(mptcp_sk(sk)->scaling_ratio, val);
+       space = mptcp_space_from_win(sk, val);
        if (space <= sk->sk_rcvbuf)
                return 0;