diff options
author | Florian Westphal <fw@strlen.de> | 2021-04-15 16:44:54 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-04-16 15:23:10 -0700 |
commit | df00b087da24c0b5341178bbd5353101c7cef98f (patch) | |
tree | 8a9549390250f02c0ab83927b1a6f62c23432081 /net/mptcp/subflow.c | |
parent | 7896248983ef4eec18c8bd301a81d8672dbc9955 (diff) | |
download | linux-stable-df00b087da24c0b5341178bbd5353101c7cef98f.tar.gz linux-stable-df00b087da24c0b5341178bbd5353101c7cef98f.tar.bz2 linux-stable-df00b087da24c0b5341178bbd5353101c7cef98f.zip |
mptcp: tag sequence_seq with socket state
Paolo Abeni suggested to avoid re-syncing new subflows because
they inherit options from listener. In case options were set on
listener but are not set on mptcp-socket there is no need to
do any synchronisation for new subflows.
This change sets sockopt_seq of new mptcp sockets to the seq of
the mptcp listener sock.
Subflow sequence is set to the embedded tcp listener sk.
Add a comment explaing why sk_state is involved in sockopt_seq
generation.
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-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 | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 350c51c6bf9d..c3da84576b3c 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -679,6 +679,9 @@ create_child: goto out; } + /* ssk inherits options of listener sk */ + ctx->setsockopt_seq = listener->setsockopt_seq; + if (ctx->mp_capable) { /* this can't race with mptcp_close(), as the msk is * not yet exposted to user-space @@ -694,6 +697,7 @@ create_child: * created mptcp socket */ new_msk->sk_destruct = mptcp_sock_destruct; + mptcp_sk(new_msk)->setsockopt_seq = ctx->setsockopt_seq; mptcp_pm_new_connection(mptcp_sk(new_msk), child, 1); mptcp_token_accept(subflow_req, mptcp_sk(new_msk)); ctx->conn = new_msk; |