This an attempt to fix the data transfer stall reported by Geliang and
Gang more carefully enforcing memory constraints at the MPTCP level.
The first path is from Shardul, included here as the condition addressed
by such a patch is frequently hit in the relevant test-cased.
Patch 2 and 3 makes the admission check much more strict for incoming
packets exceeding the memory limits, with some exception for fallback
sockets.
Patch 4, 5, 6 and 7 are cleanups/refactors finalized to safely re-using
TCP helpers on MPTCP skbs.
Patch 8 makes TCP pruning related helpers available to MPTCP and patch 9
makes use of them. Patch 10 addresses an edge scenario that could still
lead to transfer stall under memory pressure.
Finally patch 11 and 12 improve the MPTCP-level retransmission schema to
make recovery from memory pressure significanly faster.
Tested successfully vs the test cases proposed by Geliang and Gang and
vs the selftests.
---
Jast a few minor updates over v4 (that was misnamed without revision) to
deal with sashiko's feedback (some was irrelevant/wrong, mentioned as
reported on the previous revision). Changes described in the individual
patches.
Patch 1 should go via net, included here for my own sake :-P
*** BLURB HERE ***
Paolo Abeni (12):
mptcp: do not drop partial packets
mptcp: explicitly drop over memory limits
mptcp: enforce hard limit on backlog flushing
mptcp: drop the mptcp_ooo_try_coalesce() helper
mptcp: drop the cant_coalesce CB field
mptcp: remove CB offset field
mptcp: sync mptcp skb cb layout with tcp one
tcp: expose the tcp_collapse_ofo_queue() helper to mptcp usage, too
mptcp: implemented OoO queue pruning
mptcp: track prune recovery status
mptcp: move the retrans loop to a separate helper
mptcp: let the retrans scheduler do its job.
include/net/tcp.h | 8 +
net/ipv4/tcp_input.c | 54 +++--
net/mptcp/fastopen.c | 17 +-
net/mptcp/mib.c | 3 +
net/mptcp/mib.h | 3 +
net/mptcp/options.c | 74 ++++++-
net/mptcp/protocol.c | 487 +++++++++++++++++++++++++++++--------------
net/mptcp/protocol.h | 24 ++-
net/mptcp/subflow.c | 11 +
9 files changed, 492 insertions(+), 189 deletions(-)
--
2.54.0