]> git.dujemihanovic.xyz Git - linux.git/commitdiff
mptcp: fix bad RCVPRUNED mib accounting
authorPaolo Abeni <pabeni@redhat.com>
Wed, 31 Jul 2024 10:10:14 +0000 (12:10 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 1 Aug 2024 10:30:13 +0000 (12:30 +0200)
Since its introduction, the mentioned MIB accounted for the wrong
event: wake-up being skipped as not-needed on some edge condition
instead of incoming skb being dropped after landing in the (subflow)
receive queue.

Move the increment in the correct location.

Fixes: ce599c516386 ("mptcp: properly account bulk freed memory")
Cc: stable@vger.kernel.org
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
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

index a2fc54ed68c01130f34087485962dd1abfc1c3d8..0d536b183a6c559fc932dd5ececb1482e195ee68 100644 (file)
@@ -350,8 +350,10 @@ static bool __mptcp_move_skb(struct mptcp_sock *msk, struct sock *ssk,
        skb_orphan(skb);
 
        /* try to fetch required memory from subflow */
-       if (!mptcp_rmem_schedule(sk, ssk, skb->truesize))
+       if (!mptcp_rmem_schedule(sk, ssk, skb->truesize)) {
+               MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_RCVPRUNED);
                goto drop;
+       }
 
        has_rxtstamp = TCP_SKB_CB(skb)->has_rxtstamp;
 
@@ -844,10 +846,8 @@ void mptcp_data_ready(struct sock *sk, struct sock *ssk)
                sk_rbuf = ssk_rbuf;
 
        /* over limit? can't append more skbs to msk, Also, no need to wake-up*/
-       if (__mptcp_rmem(sk) > sk_rbuf) {
-               MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_RCVPRUNED);
+       if (__mptcp_rmem(sk) > sk_rbuf)
                return;
-       }
 
        /* Wake-up the reader only for in-sequence data */
        mptcp_data_lock(sk);