diff options
author | Paolo Abeni <pabeni@redhat.com> | 2020-09-14 10:01:07 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-09-14 22:28:02 +0200 |
commit | 63561a403c7c89d59205401db14fb444c6535cef (patch) | |
tree | f0cabc37a55b26c56856445fb1645c82dc44cce8 /net/mptcp/subflow.c | |
parent | Merge branch 'ethernet-convert-tasklets-to-use-new-tasklet_setup-API' (diff) | |
download | linux-63561a403c7c89d59205401db14fb444c6535cef.tar.xz linux-63561a403c7c89d59205401db14fb444c6535cef.zip |
mptcp: rethink 'is writable' conditional
Currently, when checking for the 'msk is writable' condition, we
look at the individual subflows write space.
That works well while we send data via a single subflow, but will
not as soon as we will enable concurrent xmit on multiple subflows.
With this change msk becomes writable when the following conditions
hold:
- the socket has some free write space
- there is at least a subflow with write free space
Additionally we need to set the NOSPACE bit on all subflows
before blocking.
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/mptcp/subflow.c')
-rw-r--r-- | net/mptcp/subflow.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index e8cac2655c82..7ae1d3604047 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -996,8 +996,10 @@ static void subflow_write_space(struct sock *sk) struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); struct sock *parent = subflow->conn; - sk_stream_write_space(sk); - if (sk_stream_is_writeable(sk)) { + if (!sk_stream_is_writeable(sk)) + return; + + if (sk_stream_is_writeable(parent)) { set_bit(MPTCP_SEND_SPACE, &mptcp_sk(parent)->flags); smp_mb__after_atomic(); /* set SEND_SPACE before sk_stream_write_space clears NOSPACE */ |