[PATCH] mptcp: Basic single-subflow DATA_FIN
by Mat Martineau
Send a DATA_FIN along with any subflow TCP FIN flag.
This seems to expose a bug in either the receive side disconnect
handling or the mptcp_connect test program. The self test has
intermittent problems with the receive temp file being truncated.
Signed-off-by: Mat Martineau <mathew.j.martineau(a)linux.intel.com>
---
I've tested this commit when applied to the end of the export branch,
but I have not yet applied or tested it earlier in the history with the
"initial feature set" patches.
net/mptcp/options.c | 38 +++++++++++++++++++++++++++++++++++---
net/mptcp/subflow.c | 32 ++++++++++++++++++--------------
2 files changed, 53 insertions(+), 17 deletions(-)
diff --git a/net/mptcp/options.c b/net/mptcp/options.c
index 9a18a3670cdf..79890b96afeb 100644
--- a/net/mptcp/options.c
+++ b/net/mptcp/options.c
@@ -384,18 +384,47 @@ static bool mptcp_established_options_mp(struct sock *sk, unsigned int *size,
return false;
}
+static void mptcp_write_data_fin(struct mptcp_subflow_context *subflow,
+ struct mptcp_ext *ext)
+{
+ WARN_ONCE(!subflow->conn, "MPTCP: Missing MPTCP socket information");
+
+ /* Only send DATA_FIN if all data has been sent or this is the last
+ * mapping.
+ */
+ ext->data_fin = 1;
+
+ if (!ext->use_map) {
+ ext->use_map = 1;
+ ext->dsn64 = 1;
+ ext->data_seq = mptcp_sk(subflow->conn)->write_seq;
+ ext->subflow_seq = 0;
+ ext->data_len = 1;
+ } else {
+ ext->data_len++;
+ }
+}
+
static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb,
unsigned int *size,
unsigned int remaining,
struct mptcp_out_options *opts)
{
+ struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
unsigned int dss_size = 0;
struct mptcp_ext *mpext;
unsigned int ack_size;
+ u8 tcp_fin;
- mpext = skb ? mptcp_get_ext(skb) : NULL;
+ if (skb) {
+ mpext = mptcp_get_ext(skb);
+ tcp_fin = TCP_SKB_CB(skb)->tcp_flags & TCPHDR_FIN;
+ } else {
+ mpext = NULL;
+ tcp_fin = 0;
+ }
- if (!skb || (mpext && mpext->use_map)) {
+ if (!skb || (mpext && mpext->use_map) || tcp_fin) {
unsigned int map_size;
map_size = TCPOLEN_MPTCP_DSS_BASE + TCPOLEN_MPTCP_DSS_MAP64;
@@ -405,6 +434,9 @@ static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb,
dss_size = map_size;
if (mpext)
opts->ext_copy = *mpext;
+
+ if (skb && tcp_fin)
+ mptcp_write_data_fin(subflow, &opts->ext_copy);
} else {
opts->ext_copy.use_map = 0;
WARN_ONCE(1, "MPTCP: Map dropped");
@@ -422,7 +454,7 @@ static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb,
dss_size += ack_size;
- msk = mptcp_sk(mptcp_subflow_ctx(sk)->conn);
+ msk = mptcp_sk(subflow->conn);
if (msk) {
opts->ext_copy.data_ack = msk->ack_seq;
} else {
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
index ff38d54392cd..f6f4dbf2dbab 100644
--- a/net/mptcp/subflow.c
+++ b/net/mptcp/subflow.c
@@ -422,6 +422,7 @@ static enum mapping_status get_mapping_status(struct sock *ssk)
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
struct mptcp_ext *mpext;
struct sk_buff *skb;
+ u16 data_len;
u64 map_seq;
skb = skb_peek(&ssk->sk_receive_queue);
@@ -446,26 +447,29 @@ static enum mapping_status get_mapping_status(struct sock *ssk)
if (!subflow->map_valid)
return MAPPING_INVALID;
+
goto validate_seq;
}
- pr_debug("seq=%llu is64=%d ssn=%u data_len=%u", mpext->data_seq,
- mpext->dsn64, mpext->subflow_seq, mpext->data_len);
+ pr_debug("seq=%llu is64=%d ssn=%u data_len=%u data_fin=%d",
+ mpext->data_seq, mpext->dsn64, mpext->subflow_seq,
+ mpext->data_len, mpext->data_fin);
- if (mpext->data_len == 0) {
+ data_len = mpext->data_len;
+ if (data_len == 0) {
pr_err("Infinite mapping not handled");
MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_INFINITEMAPRX);
return MAPPING_INVALID;
- } else if (mpext->subflow_seq == 0 &&
- mpext->data_fin == 1) {
- if (WARN_ON_ONCE(mpext->data_len != 1))
- return false;
+ }
- /* do not try hard to handle this any better, till we have
- * real data_fin support
- */
- pr_debug("DATA_FIN with no payload");
- return MAPPING_DATA_FIN;
+ if (mpext->data_fin == 1) {
+ if (data_len == 1) {
+ pr_debug("DATA_FIN with no payload");
+ return MAPPING_DATA_FIN;
+ }
+
+ /* Adjust for DATA_FIN using 1 byte of sequence space */
+ data_len--;
}
if (!mpext->dsn64) {
@@ -480,7 +484,7 @@ static enum mapping_status get_mapping_status(struct sock *ssk)
/* Allow replacing only with an identical map */
if (subflow->map_seq == map_seq &&
subflow->map_subflow_seq == mpext->subflow_seq &&
- subflow->map_data_len == mpext->data_len) {
+ subflow->map_data_len == data_len) {
skb_ext_del(skb, SKB_EXT_MPTCP);
return MAPPING_OK;
}
@@ -499,7 +503,7 @@ static enum mapping_status get_mapping_status(struct sock *ssk)
subflow->map_seq = map_seq;
subflow->map_subflow_seq = mpext->subflow_seq;
- subflow->map_data_len = mpext->data_len;
+ subflow->map_data_len = data_len;
subflow->map_valid = 1;
pr_debug("new map seq=%llu subflow_seq=%u data_len=%u",
subflow->map_seq, subflow->map_subflow_seq,
--
2.24.0
1 year, 5 months
[Weekly meetings] MoM - 14th of November 2019
by Matthieu Baerts
Hello,
Yesterday, we had our 75th meeting with Mat, Peter and Ossama (Intel
OTC), Christoph (Apple), Paolo, Florian and Davide (RedHat) and myself
(Tessares).
Thanks again for this new good meeting!
Here are the minutes of the meeting:
Accepted patches:
- The list of accepted patches can be seen on PatchWork:
https://patchwork.ozlabs.org/project/mptcp/list/
- By Florian Westphal, Paolo Abeni, Peter Krystad
ID Name
------- ---------------------------------------------------------------
1194086 [8/8] mptcp: Add IPv6 support for new sysctl initialization
1194081 [7/8] mptcp: Add IPv6 support for shutdown()
1194080 [6/8] mptcp: Add IPv6 support for key generation
1194087 [5/8] mptcp: Add IPV6 support for incoming connections
1194085 [4/8] mptcp: Add IPv6 support for mptcp_poll
1194088 [3/8] mptcp: Add IPV6 support for outgoing connections
1194084 [2/8] mptcp: Add IPv6 support for Associate MPTCP context
1194082 [1/8] mptcp: Add IPv6 support for MPTCP socket stubs
1192875 [4/4] mptcp: init new_ctx->icsk_af_ops() in subflow_ulp_clone()
1192871 [3/4] mptcp: init ctx->icsk_af_ops in subflow_ulp_init()
1192873 [2/4] mptcp: use customary name for tcp_sock variable
1192874 [1/4] mptcp: drop most of mptcp_init_sock() impl
1192074 mptcp: Missing chunk from "Add IPv6 support"
1189896 [5/5] mptcp: Switch to CONFIG_MPTCP_IPV6
1189897 [4/5] mptcp: Switch to CONFIG_MPTCP_IPV6
1189895 [3/5] mptcp: Switch to CONFIG_MPTCP_IPV6
1189893 [2/5] mptcp: Switch to CONFIG_MPTCP_IPV6
1189894 [1/5] mptcp: Make MPTCP IPv6 support depend on CONFIG_IPV6=y
1189854 [4/4] poll: release lock before waiting
1189853 [3/4] protocol: use sk_wait_event helper
1189852 [2/4] options: ignore mptcp-level ack that is ahead of write_se
1189851 [1/4] protocol.h: mptcp_subflow_get_map_offset arg can be const
1189850 [0/4] four small cleanups and fixes
Pending patches:
- The list of pending patches can be seen on PatchWork:
https://patchwork.ozlabs.org/project/mptcp/list/
- By Christoph Paasch, Florian Westphal, Mat Martineau, Paolo
Abeni, Peter Krystad
1190123: Deferred: mptcp: Add DATA_FIN transmission and handling
1191205: Needs Review / ACK: [1/2] mptcp: parse and emit MP_CAPABLE opti
1191206: Needs Review / ACK: [2/2] mptcp: process MP_CAPABLE data option
1192275: Deferred: [RFC,4/6] options: ack pending sequence
1192841: RFC: [RFC] mptcp: move from sha1 (v0) to sha256 (v1)
1193548: Changes Requested: [v2,0/4] mptcp: add and use wmem_queued acco
1193547: Changes Requested: [v2,1/4] mptcp: add wmem_queued accounting
1193549: Changes Requested: [v2,2/4] mptcp: allow partial cleaning of rt
1193550: Changes Requested: [v2,3/4] mptcp: add and use mptcp RTX flag
1193551: Changes Requested: [v2,4/4] sendmsg: block until mptcp sk is wr
1194231: RFC: Re: [RFC PATCH] mptcp: move from sha1 (v0) to sha256 (v1)
1194592: New: [RFC,1/1] mptcp: Optimize struct mptcp_received_options.
1194601: Changes Requested: mptcp: Basic single-subflow DATA_FIN
1194982: New: [RFC] mptcp: wmem accounting and nonblocking io support
1194983: New: [RFC,01/14] selftest: add mmap-write support
1194984: New: [RFC,02/14] selftests: make sockets non-blocking for defau
1194985: New: [RFC,03/14] mptcp: add wmem_queued accounting
1194986: New: [RFC,04/14] mptcp: allow partial cleaning of rtx head dfra
1194987: New: [RFC,05/14] mptcp: add and use mptcp RTX flag
1194988: New: [RFC,06/14] sendmsg: block until mptcp sk is writeable
1194989: New: [RFC,07/14] subflow: sk_data_ready: make wakeup on tcp soc
1194990: New: [RFC,08/14] mptcp: add and use mptcp_subflow_get_retrans
1194991: New: [RFC,09/14] mptcp: sendmsg: transmit on backup if other su
1194992: New: [RFC,10/14] recv: make DATA_READY reflect ssk in-sequence
1194993: New: [RFC,11/14] sendmsg: clear SEND_SPACE if write caused wmem
1194994: New: [RFC,12/14] mptcp_poll: don't consider subflow socket stat
1194995: New: [RFC,13/14] sendmsg: don't restart mptcp_sendmsg_frag
1194996: New: [RFC,14/14] sendmsg: truncate source buffer if mptcp sndbu
1195018: New: [v3,1/4,1/1] mptcp: move mp_capable initialization at subf
1195017: New: [v3,2/4] mptcp: disable on req sk if MD5SIG is enabled
1195016: New: [v3,3/4] mptcp: warn once if exceeding tcp opt space for d
1195019: New: [v3,4/4] mptcp: remove unneeded check in mptcp_established
Current Roadmap:
- Part 1 (mainly TCP changes, will be sent with Part 2):
- MAINTAINERS file [TODO]
- Part 2 (minimum set for MPTCP, up to KSelftests, one subflow):
- MPTCPv1 support [Patches shared]
- opti in TCP options? [Patch shared]
- Send DATA_FIN, no corner cases [Patch shared]
- IPv6 support [Done]
- if the peer never sends MPTCP-level ACK, a lot of memory will
be used [Patches shared]
- Part 3 (after the KSelftests, to be sent ideally before the end
of the year)
- Full DATA_FIN support [WIP]
- Shared recv window (drop data received on other subflows) [TODO]
- Active backup support [WIP]
- Part 4:
- Shared recv window (full support)
- IPv6 - IPv4 mapped support
- not dropping MPTCP options (ADD_ADDR, etc.)
- FAST_CLOSE
- full MPTCP v1 support (reliable add_addr, etc.)
- Part 5:
- opti/perfs
Remaining items for the initial submission: Update:
- IPv6 support:
- nothing more to do for initial submission
- MPTCP v1 support:
- Christoph is waiting for review
- sha256 is complete (but on review)
- if we move to MPTCPv1, we will lose support with mptcp.org
- we already discussed about that and even if technically, that
sounds bad because we already have v0 support but that will simplify the
code, not having to support multiple versions, etc. and we hope that v1
support in mptcp.org will be stabilized soon!
- DATA_FIN:
- Mat is working on it
- Mat sent a smaller patch: work with only one subflow for the
moment → when we close one subflow, we send the DATA_FIN (not working
when there are multiple subflows)
- Mat is looking at a failure he got (end of the data is
missing), maybe not related to the change. Maybe due to an MPTCP-level
retransmission (bug).
- Mat is waiting for a review
- Mat will send also bug-fix patches when working on that
- To be able to support multiple subflows, maybe a simple check
could be added (more than 1 entries in the conn list) → then we can
apply the patch before the kselftest and the rest will continue to work.
*Mat* will look at that
- Active backup support:
- Florian is working on it
- Florian just sent 14 new patches
- https://patchwork.ozlabs.org/patch/1194982/
- with a nice description in the cover-letter :)
- optimisation of options in TCP "struct mptcp_options_received":
- Note: in some code of .h files, some spaces/tabs are used
while it should be the opposite:
included in the patch
- the patch is waiting for review
- if the peer never sends MPTCP-level ACK, a lot of memory will be
used:
- Florian is working on that
- it is included in the different patches Florian sent
- MAINTAINERS file:
- mailing list: do we want to keep netdev (like ebpf stuff)
- who can be co-maintainer?
- better not to have only one maintainer
- Mat will be on the list
- Maintainer also means that we might need to review stuff and
dedicate time on that. If it can be done on the work time, that's easier.
- Matth doesn't mind to help!
- We need to organize a remote beer event
Pending changes:
- a lot of them would have to be squashed in many different commits
- even Florian said that he would have to sit down to do that!
- this situation is not ideal to develop new patches: better to
merge this ASAP
- MPTCPv1 and sha256 would not be squashed but would cause conflicts
- /!\ don't forget to tell Matth (and the list) if you plan to do a
rebase of "export".
Regarding MD5 series:
- should we drop https://patchwork.ozlabs.org/patch/1193024/
- *Mat* & *Peter* will look at that after the meeting
3rd Ack:
- like TCP, the SYN is consuming 1 byte
- so it makes sense to send a DATA_ACK there but it is not necessary
- It is maybe required to send the DATA_ACK when TFO is used in
combination with MPTCP (but not needed now)
Not being able to send MPTCP options:
- related to MD5 series
- we currently drop them (ADD_ADDR, etc.)
- should we log that somewhere? comment? github issue? framapad
copied between meetings? nothing?
- By Paolo: I would like to avoid adding todos inside comments for
the first 2 chunks patches - to avoid additional complex rebases
squashing even later.
- we can keep that in the pad and copy/paste the item after each
meeting
ADD_ADDR6 echo:
- we need 30 bytes (HMAC + IPv6).
→ Errata by Christoph: HMAC is not in the echo. But 30 bytes is
possible if we include with ADD_ADDR6, echo == 0 but with a port.
- only taking the ID is apparently not enough
- Christoph will look at that
- the idea from the RFC is to drop the timestamp in this packet
- Christoph is going to IETF meeting and if we need to change
something, we can have an errata (feedback from implementer)
Patchwork:
- do not hesitate to update status ;-)
- do you receive notifications (email) when something is changed? → no
- Feel free to "delegate" a patch to someone, even after review
- meaning of patchwork status now on the wiki:
https://github.com/multipath-tcp/mptcp_net-next/wiki/Patchwork
CI:
- Now also checking Kselftest in the commit where it is introduced
- (still doing that at the end)
Rebase:
- move 3 commits after kselftests
- *Matth*: TODO
Selftests:
- run IPv6 by default or only let these tests ran only by the CI?
(We can set the new timeout depending on this answer)
- maybe better to run both to have "robots" also testing IPv6
- *Matth*: TODO
- it seems there is no way to pass arguments to kselftests via the
"make" command
- Alternative:
cd tools/testing/selftests/net/mptcp
./mptcp_connect.sh -6
Packetdrill:
- Because Davide didn't practice his sign language for a while, we
will talk about that next week
- packetdrill v2.0 first breath on mptcp-net-next:
https://paste.fedoraproject.org/paste/qstGNcEbMfi4oYDySh9LIg
- Code at https://github.com/dcaratti/packetdrill/tree/mptcp-net-next
- ~Some~ Many issues need to be fixed
Some nice photos to illustrate the Sigcomm award:
-
https://trends.levif.be/economie/high-tech/numerik/un-prix-prestigieux-po...
- Did you receive your certificate? No for most of us.
- It seems some certificates are still in China. Olivier is looking
at that.
Next meeting:
- We propose to have it next Thursday, the 21st of November.
- Usual time: 17:00 UTC (9am PST, 6pm CET)
- Still open to everyone!
- https://annuel2.framapad.org/p/mptcp_upstreaming_20191121
Feel free to comment on these points and propose new ones for the next
meeting!
Talk to you next week,
Matt
--
Matthieu Baerts | R&D Engineer
matthieu.baerts(a)tessares.net
Tessares SA | Hybrid Access Solutions
www.tessares.net
1 Avenue Jean Monnet, 1348 Louvain-la-Neuve, Belgium
1 year, 5 months
[PATCH 1/4] mptcp: disable mptcp when md5sig is set on socket
by Paolo Abeni
As per last public mtg discussion, md5sig will cause TCP option space
exaustion. Without md5sig we can't exhaust the TCP option space.
This series explcitly disable MPTCP when md5sig is set, and cleanup
later option len checks with the assumption that TCP option space exhaustion
is not expected - add a single WARN_ON() for that.
Paolo Abeni (1):
mptcp: move mp_capable initialization at subflow_init_req() start
mptcp: disable on req sk if MD5SIG is enabled
mptcp: warn once if exceeding tcp opt space for dss/mp_capable
mptcp: remove unneeded check in mptcp_established_options_mp()
net/mptcp/subflow.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--
2.21.0
1 year, 5 months
[PATCH 0/8] Add IPv6 Support
by Peter Krystad
This patchset is a replacement for the single "Add IPv6 Support"
commit, with the chunks broken into seperate squash-able commits.
Peter Krystad (8):
mptcp: Add IPv6 support for MPTCP socket stubs
mptcp: Add IPv6 support for Associate MPTCP context
mptcp: Add IPV6 support for outgoing connections
mptcp: Add IPv6 support for mptcp_poll
mptcp: Add IPV6 support for incoming connections
mptcp: Add IPv6 support for key generation
mptcp: Add IPv6 support for shutdown()
mptcp: Add IPv6 support for new sysctl initialization
include/net/mptcp.h | 10 +++++++
net/ipv6/tcp_ipv6.c | 7 +++++
net/mptcp/ctrl.c | 11 ++++++++
net/mptcp/protocol.c | 62 +++++++++++++++++++++++++++++++++++++++++---
net/mptcp/protocol.h | 6 +++++
net/mptcp/subflow.c | 61 +++++++++++++++++++++++++++++++++++++++++--
6 files changed, 151 insertions(+), 6 deletions(-)
--
2.17.2
1 year, 5 months
[PATCH 0/4] mptcp: some cleanups
by Paolo Abeni
This address the build issue we currently have on patch
"mptcp: Add key generation and token tree", plus move around some related
code for consistency.
No differences in the resulting code vs current git tree.
The tree should build on each patch now.
Paolo Abeni (1):
1/4 mptcp: drop most of mptcp_init_sock() impl
2/4 mptcp: use customary name for tcp_sock variable
3/4 mptcp: init ctx->icsk_af_ops in subflow_ulp_init()
4/4 mptcp: init new_ctx->icsk_af_ops() in subflow_ulp_clone()
net/mptcp/protocol.c | 13 +------------
1 file changed, 1 insertion(+), 12 deletions(-)
--
2.21.0
1 year, 5 months
[PATCH 1/5] mptcp: Make MPTCP IPv6 support depend on CONFIG_IPV6=y
by Peter Krystad
Do not allow MPTCP IPv6 support if IPv6 is included as a module.
squashto: Add MPTCP socket stubs
Signed-off-by: Peter Krystad <peter.krystad(a)linux.intel.com>
---
net/mptcp/Kconfig | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/net/mptcp/Kconfig b/net/mptcp/Kconfig
index f21190a4f7e9..c1a99f07a4cd 100644
--- a/net/mptcp/Kconfig
+++ b/net/mptcp/Kconfig
@@ -1,6 +1,6 @@
config MPTCP
- bool "Multipath TCP"
+ bool "MPTCP: Multipath TCP"
depends on INET
select SKB_EXTENSIONS
help
@@ -9,3 +9,8 @@ config MPTCP
uses the TCP protocol, and TCP options carry header information for
MPTCP.
+config MPTCP_IPV6
+ bool "MPTCP: IPv6 support for Multipath TCP"
+ depends on MPTCP
+ select IPV6
+ default y
--
2.17.2
1 year, 5 months
[PATCH] mptcp: Missing chunk from "Add IPv6 support"
by Peter Krystad
This chunk appears to have been dropped from the IPv6 commit.
squashto: Add IPv6 support
Signed-off-by: Peter Krystad <peter.krystad(a)linux.intel.com>
---
net/mptcp/protocol.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 7bea6b62f66e..1a432abfb176 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -1099,10 +1099,7 @@ static int mptcp_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
{
struct mptcp_sock *msk = mptcp_sk(sock->sk);
struct socket *ssock;
- int err = -ENOTSUPP;
-
- if (uaddr->sa_family != AF_INET) // @@ allow only IPv4 for now
- return err;
+ int err;
ssock = mptcp_socket_create_get(msk);
if (IS_ERR(ssock))
--
2.17.2
1 year, 5 months
[PATCH v2 0/4] mptcp: disable mptcp when md5sig is set
by Paolo Abeni
As per last public mtg discussion, md5sig will cause TCP option space
exaustion. Without md5sig we can't exhaust the TCP option space.
This series explcitly disable MPTCP when md5sig is set, and cleanup
later option len checks with the assumption that TCP option space exhaustion
is not expected - add a single WARN_ON() for that.
v1 -> v2:
- fix a couple of typos in comment/commit messages
Paolo Abeni (4):
mptcp: move mp_capable initialization at subflow_init_req() start
mptcp: disable on req sk if MD5SIG is enabled
mptcp: warn once if exceeding tcp opt space for dss/mp_capable
mptcp: remove unneeded check in mptcp_established_options_mp()
net/mptcp/subflow.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--
2.21.0
1 year, 5 months
[PATCH v2 0/4] mptcp: add and use wmem_queued accounting
by Florian Westphal
This is v2 of the wmem accouting patch set.
I've dropped the ack_seq patches, we can resurrect them later on if needed.
After adding wmem thresholds, mptcp can deadlock at connection level when
both sides call write() at the same time and sndbuf is exhausted.
This won't happen in the selftests because it only sends small amounts
of data at a time and will always call read() if data is available.
It could happen with code that sends large amount of data at once
though, or when sndbuf is reduced via setsockopt:
Unlike TCP, which acknowledges in-sequence bytes queued to the socket, MPTCP
updates its ack_seq only when recv() is called.
In case both peers are blocked in write, no updates of the mptcp ack
sequence space occurs. This in turn can prevent both peers from making
any progress: even if all data is queued on the peer, it will look like no
data arrived and thus no wmem can be freed up for the write() to complete.
Resolving this will need more work to get pushed into the data_ready
callback, which is hard because of need to synchronize with other subflows
used by same mptcp socket.
The following changes since commit 6e61dd3c078fe69ac2e442a9251d771a61dcc62f:
subflow: wake parent mptcp socket on subflow state change (2019-11-08 15:22:58 +0000)
are available in the Git repository at:
git://git.breakpoint.cc/fw/mptcp-next.git wmem_acct_06
for you to fetch changes up to eea081f8828bbe2c503873319374a7666c6b6af2:
sendmsg: block until mptcp sk is writeable (2019-11-12 14:53:29 +0100)
----------------------------------------------------------------
Florian Westphal (4):
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
net/mptcp/options.c | 2 +-
net/mptcp/protocol.c | 77 +++++++++++++++++++++++++++++++++++++++++++++-------
net/mptcp/protocol.h | 3 +-
3 files changed, 70 insertions(+), 12 deletions(-)
1 year, 5 months