| From | Greg Kroah-Hartman <> | Subject | [PATCH 5.11 044/152] mptcp: add a missing retransmission timer scheduling | Date | Mon, 5 Apr 2021 10:53:13 +0200 |
| |
From: Paolo Abeni <pabeni@redhat.com>
[ Upstream commit d09d818ec2ed31bce94fdcfcc4700233e01f8498 ]
Currently we do not schedule the MPTCP retransmission timer after pushing the data when such action happens in the subflow context.
This may cause hang-up on active-backup scenarios, or even when only single subflow msks are involved, if we lost some peer's ack.
Fixes: 6e628cd3a8f7 ("mptcp: use mptcp release_cb for delayed tasks") Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org> --- net/mptcp/options.c | 3 +-- net/mptcp/protocol.c | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 37ef0bf098f6..9e86c601093f 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -885,8 +885,7 @@ static void ack_update_msk(struct mptcp_sock *msk, msk->wnd_end = new_wnd_end; /* this assumes mptcp_incoming_options() is invoked after tcp_ack() */ - if (after64(msk->wnd_end, READ_ONCE(msk->snd_nxt)) && - sk_stream_memory_free(ssk)) + if (after64(msk->wnd_end, READ_ONCE(msk->snd_nxt))) __mptcp_check_push(sk, ssk); if (after64(new_snd_una, old_snd_una)) { diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 44b8868f0607..67483e561b37 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1568,6 +1568,9 @@ out: mptcp_set_timeout(sk, ssk); tcp_push(ssk, 0, info.mss_now, tcp_sk(ssk)->nonagle, info.size_goal); + if (!mptcp_timer_pending(sk)) + mptcp_reset_timer(sk); + if (msk->snd_data_fin_enable && msk->snd_nxt + 1 == msk->write_seq) mptcp_schedule_work(sk); -- 2.30.1
|