diff options
author | Paolo Abeni <pabeni@redhat.com> | 2020-10-05 13:36:44 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-10-06 16:08:06 +0300 |
commit | 717f20341686245fdde9000ee09fdab5dc722477 (patch) | |
tree | 14e494001521d76a51817615b3eaf7c32d4dbc27 /net | |
parent | 8b0308fe319b8002753ea66f8f940fb393792ddd (diff) | |
download | linux-717f20341686245fdde9000ee09fdab5dc722477.tar.xz |
mptcp: don't skip needed ack
Currently we skip calling tcp_cleanup_rbuf() when packets
are moved into the OoO queue or simply dropped. In both
cases we still increment tp->copied_seq, and we should
ask the TCP stack to check for ack.
Fixes: c76c6956566f ("mptcp: call tcp_cleanup_rbuf on subflows")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/mptcp/protocol.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 82b324ed3c4c..f893985f37d3 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -454,10 +454,12 @@ static bool __mptcp_move_skbs_from_subflow(struct mptcp_sock *msk, unsigned int moved = 0; bool more_data_avail; struct tcp_sock *tp; + u32 old_copied_seq; bool done = false; pr_debug("msk=%p ssk=%p", msk, ssk); tp = tcp_sk(ssk); + old_copied_seq = tp->copied_seq; do { u32 map_remaining, offset; u32 seq = tp->copied_seq; @@ -516,8 +518,8 @@ static bool __mptcp_move_skbs_from_subflow(struct mptcp_sock *msk, } while (more_data_avail); *bytes += moved; - if (moved) - tcp_cleanup_rbuf(ssk, moved); + if (tp->copied_seq != old_copied_seq) + tcp_cleanup_rbuf(ssk, 1); return done; } |