Commit 4e14867d authored by Paolo Abeni's avatar Paolo Abeni Committed by David S. Miller

mptcp: tune re-injections for csum enabled mode

If the MPTCP-level checksum is enabled, on re-injections we
must spool a complete DSS, or the receive side will not be
able to compute the csum and process any data.
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent dd8bcd17
...@@ -2375,8 +2375,8 @@ static void __mptcp_retrans(struct sock *sk) ...@@ -2375,8 +2375,8 @@ static void __mptcp_retrans(struct sock *sk)
/* limit retransmission to the bytes already sent on some subflows */ /* limit retransmission to the bytes already sent on some subflows */
info.sent = 0; info.sent = 0;
info.limit = dfrag->already_sent; info.limit = READ_ONCE(msk->csum_enabled) ? dfrag->data_len : dfrag->already_sent;
while (info.sent < dfrag->already_sent) { while (info.sent < info.limit) {
if (!mptcp_alloc_tx_skb(sk, ssk)) if (!mptcp_alloc_tx_skb(sk, ssk))
break; break;
...@@ -2388,9 +2388,11 @@ static void __mptcp_retrans(struct sock *sk) ...@@ -2388,9 +2388,11 @@ static void __mptcp_retrans(struct sock *sk)
copied += ret; copied += ret;
info.sent += ret; info.sent += ret;
} }
if (copied) if (copied) {
dfrag->already_sent = max(dfrag->already_sent, info.sent);
tcp_push(ssk, 0, info.mss_now, tcp_sk(ssk)->nonagle, tcp_push(ssk, 0, info.mss_now, tcp_sk(ssk)->nonagle,
info.size_goal); info.size_goal);
}
mptcp_set_timeout(sk, ssk); mptcp_set_timeout(sk, ssk);
release_sock(ssk); release_sock(ssk);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment