This (large, sigh) series fixes poll handling in mptcp.
The first patch extends the test suite with a mmap-based mode to
check large, blocking writes. This uncovered a minor problem with the
earlier v2 wmem accounting patch series -- we would happily take a lot
more data than sndbuf allowed, as we only limited based on what the subflow
could accept. So with a 4k sndbuf we could easily accept 256kb or even more.
This patch doesn't change anything in the test suite behaviour however,
you need to use "-b 4096" and/or "-m mmap" to enable this mode.
Second patch changes test suite to move to nonblocking io, this breaks mptcp
because mptcp_poll can signal EPOLLIN when it shouldn't, so userspace gets
-EAGAIN even though poll told it otherwise.
Patches 3/4/5/6 are an update vs. last wmem accounting series.
Remaining patches fix the nonblocking io behaviour.
mptcp_poll is made to be stand-alone, i.e. it no longer calls
__tcp_poll on the subflow sockets and only considers mptcp_sk state.
After this series the selftest works again and mptcp sk rtx queue is
limited by msk wmem.
The patches can't easily be rebased/merged so I propose that I would
squash this myself and send a pull request when done.
The following changes since commit d1dbb32dc58df543e89f4004c1a0b96fe8acf99b:
subflow: wake parent mptcp socket on subflow state change (2019-11-14 13:03:44 +0000)
are available in the Git repository at:
for you to fetch changes up to fa583a84bcf9550783ac6a229ab584d68764659e:
sendmsg: truncate source buffer if mptcp sndbuf size was set from userspace (2019-11-14
Florian Westphal (14):
selftest: add mmap-write support
selftests: make sockets non-blocking for default poll mode
mptcp: add wmem_queued accounting
mptcp: allow partial cleaning of rtx head dfrag
mptcp: add and use mptcp RTX flag
sendmsg: block until mptcp sk is writeable
subflow: sk_data_ready: make wakeup on tcp sock conditional
mptcp: add and use mptcp_subflow_get_retrans
mptcp: sendmsg: transmit on backup if other subflows have been closed
recv: make DATA_READY reflect ssk in-sequence state
sendmsg: clear SEND_SPACE if write caused wmem to grow too large
mptcp_poll: don't consider subflow socket state anymore
sendmsg: don't restart mptcp_sendmsg_frag
sendmsg: truncate source buffer if mptcp sndbuf size was set from userspace
net/mptcp/options.c | 2 +-
net/mptcp/protocol.c | 295 ++++++++++++++++-----
net/mptcp/protocol.h | 4 +-
net/mptcp/subflow.c | 12 +-
tools/testing/selftests/net/mptcp/mptcp_connect.c | 268 ++++++++++++++++++-
tools/testing/selftests/net/mptcp/mptcp_connect.sh | 36 ++-
6 files changed, 544 insertions(+), 73 deletions(-)