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: c76c695656
("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>
This commit is contained in:
Родитель
8b0308fe31
Коммит
717f203416
|
@ -454,10 +454,12 @@ static bool __mptcp_move_skbs_from_subflow(struct mptcp_sock *msk,
|
||||||
unsigned int moved = 0;
|
unsigned int moved = 0;
|
||||||
bool more_data_avail;
|
bool more_data_avail;
|
||||||
struct tcp_sock *tp;
|
struct tcp_sock *tp;
|
||||||
|
u32 old_copied_seq;
|
||||||
bool done = false;
|
bool done = false;
|
||||||
|
|
||||||
pr_debug("msk=%p ssk=%p", msk, ssk);
|
pr_debug("msk=%p ssk=%p", msk, ssk);
|
||||||
tp = tcp_sk(ssk);
|
tp = tcp_sk(ssk);
|
||||||
|
old_copied_seq = tp->copied_seq;
|
||||||
do {
|
do {
|
||||||
u32 map_remaining, offset;
|
u32 map_remaining, offset;
|
||||||
u32 seq = tp->copied_seq;
|
u32 seq = tp->copied_seq;
|
||||||
|
@ -516,8 +518,8 @@ static bool __mptcp_move_skbs_from_subflow(struct mptcp_sock *msk,
|
||||||
} while (more_data_avail);
|
} while (more_data_avail);
|
||||||
|
|
||||||
*bytes += moved;
|
*bytes += moved;
|
||||||
if (moved)
|
if (tp->copied_seq != old_copied_seq)
|
||||||
tcp_cleanup_rbuf(ssk, moved);
|
tcp_cleanup_rbuf(ssk, 1);
|
||||||
|
|
||||||
return done;
|
return done;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче