Message ID | 308362689215103c03232eeb0273c046c2ce096c.1592477699.git.pabeni@redhat.com |
---|---|
State | Accepted, archived |
Delegated to: | Matthieu Baerts |
Headers | show |
Series | mptcp: fallback refactor follow-up | expand |
On Thu, 18 Jun 2020, Paolo Abeni wrote: > This clean the code a bit and will simplify the next > patch, too. This is a helpful simplification, thanks! Looks good to merge. > > Signed-off-by: Paolo Abeni <pabeni@redhat.com> > --- > net/mptcp/protocol.c | 53 +++++++++++++++++--------------------------- > 1 file changed, 20 insertions(+), 33 deletions(-) > > diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c > index ff160b95cc84..75a96d8665e9 100644 > --- a/net/mptcp/protocol.c > +++ b/net/mptcp/protocol.c > @@ -86,32 +86,16 @@ static struct socket *__mptcp_tcp_fallback(struct mptcp_sock *msk) > return msk->subflow; > } > > -static bool __mptcp_can_create_subflow(const struct mptcp_sock *msk) > -{ > - return !msk->first; > -} > - > -static struct socket *__mptcp_socket_create(struct mptcp_sock *msk, int state) > +static int __mptcp_socket_create(struct mptcp_sock *msk) > { > struct mptcp_subflow_context *subflow; > struct sock *sk = (struct sock *)msk; > struct socket *ssock; > int err; > > - ssock = __mptcp_tcp_fallback(msk); > - if (unlikely(ssock)) > - return ssock; > - > - ssock = __mptcp_nmpc_socket(msk); > - if (ssock) > - goto set_state; > - > - if (!__mptcp_can_create_subflow(msk)) > - return ERR_PTR(-EINVAL); > - > err = mptcp_subflow_create_socket(sk, &ssock); > if (err) > - return ERR_PTR(err); > + return err; > > msk->first = ssock->sk; > msk->subflow = ssock; > @@ -119,10 +103,7 @@ static struct socket *__mptcp_socket_create(struct mptcp_sock *msk, int state) > list_add(&subflow->node, &msk->conn_list); > subflow->request_mptcp = 1; > > -set_state: > - if (state != MPTCP_SAME_STATE) > - inet_sk_state_store(sk, state); > - return ssock; > + return 0; > } > > static void __mptcp_move_skb(struct mptcp_sock *msk, struct sock *ssk, > @@ -1342,6 +1323,10 @@ static int mptcp_init_sock(struct sock *sk) > if (ret) > return ret; > > + ret = __mptcp_socket_create(mptcp_sk(sk)); > + if (ret) > + return ret; > + > sk_sockets_allocated_inc(sk); > sk->sk_rcvbuf = sock_net(sk)->ipv4.sysctl_tcp_rmem[1]; > sk->sk_sndbuf = sock_net(sk)->ipv4.sysctl_tcp_wmem[2]; > @@ -1853,9 +1838,9 @@ static int mptcp_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) > int err; > > lock_sock(sock->sk); > - ssock = __mptcp_socket_create(msk, MPTCP_SAME_STATE); > - if (IS_ERR(ssock)) { > - err = PTR_ERR(ssock); > + ssock = __mptcp_nmpc_socket(msk); > + if (!ssock) { > + err = -EINVAL; > goto unlock; > } > > @@ -1885,13 +1870,14 @@ static int mptcp_stream_connect(struct socket *sock, struct sockaddr *uaddr, > goto do_connect; > } > > - mptcp_token_destroy(msk); > - ssock = __mptcp_socket_create(msk, TCP_SYN_SENT); > - if (IS_ERR(ssock)) { > - err = PTR_ERR(ssock); > + ssock = __mptcp_nmpc_socket(msk); > + if (!ssock) { > + err = -EINVAL; > goto unlock; > } > > + mptcp_token_destroy(msk); > + inet_sk_state_store(sock->sk, TCP_SYN_SENT); > subflow = mptcp_subflow_ctx(ssock->sk); > #ifdef CONFIG_TCP_MD5SIG > /* no MPTCP if MD5SIG is enabled on this socket or we may run out of > @@ -1929,13 +1915,14 @@ static int mptcp_listen(struct socket *sock, int backlog) > pr_debug("msk=%p", msk); > > lock_sock(sock->sk); > - mptcp_token_destroy(msk); > - ssock = __mptcp_socket_create(msk, TCP_LISTEN); > - if (IS_ERR(ssock)) { > - err = PTR_ERR(ssock); > + ssock = __mptcp_nmpc_socket(msk); > + if (!ssock) { > + err = -EINVAL; > goto unlock; > } > > + mptcp_token_destroy(msk); > + inet_sk_state_store(sock->sk, TCP_LISTEN); > sock_set_flag(sock->sk, SOCK_RCU_FREE); > > err = ssock->ops->listen(ssock, backlog); > -- > 2.26.2 -- Mat Martineau Intel
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index ff160b95cc84..75a96d8665e9 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -86,32 +86,16 @@ static struct socket *__mptcp_tcp_fallback(struct mptcp_sock *msk) return msk->subflow; } -static bool __mptcp_can_create_subflow(const struct mptcp_sock *msk) -{ - return !msk->first; -} - -static struct socket *__mptcp_socket_create(struct mptcp_sock *msk, int state) +static int __mptcp_socket_create(struct mptcp_sock *msk) { struct mptcp_subflow_context *subflow; struct sock *sk = (struct sock *)msk; struct socket *ssock; int err; - ssock = __mptcp_tcp_fallback(msk); - if (unlikely(ssock)) - return ssock; - - ssock = __mptcp_nmpc_socket(msk); - if (ssock) - goto set_state; - - if (!__mptcp_can_create_subflow(msk)) - return ERR_PTR(-EINVAL); - err = mptcp_subflow_create_socket(sk, &ssock); if (err) - return ERR_PTR(err); + return err; msk->first = ssock->sk; msk->subflow = ssock; @@ -119,10 +103,7 @@ static struct socket *__mptcp_socket_create(struct mptcp_sock *msk, int state) list_add(&subflow->node, &msk->conn_list); subflow->request_mptcp = 1; -set_state: - if (state != MPTCP_SAME_STATE) - inet_sk_state_store(sk, state); - return ssock; + return 0; } static void __mptcp_move_skb(struct mptcp_sock *msk, struct sock *ssk, @@ -1342,6 +1323,10 @@ static int mptcp_init_sock(struct sock *sk) if (ret) return ret; + ret = __mptcp_socket_create(mptcp_sk(sk)); + if (ret) + return ret; + sk_sockets_allocated_inc(sk); sk->sk_rcvbuf = sock_net(sk)->ipv4.sysctl_tcp_rmem[1]; sk->sk_sndbuf = sock_net(sk)->ipv4.sysctl_tcp_wmem[2]; @@ -1853,9 +1838,9 @@ static int mptcp_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) int err; lock_sock(sock->sk); - ssock = __mptcp_socket_create(msk, MPTCP_SAME_STATE); - if (IS_ERR(ssock)) { - err = PTR_ERR(ssock); + ssock = __mptcp_nmpc_socket(msk); + if (!ssock) { + err = -EINVAL; goto unlock; } @@ -1885,13 +1870,14 @@ static int mptcp_stream_connect(struct socket *sock, struct sockaddr *uaddr, goto do_connect; } - mptcp_token_destroy(msk); - ssock = __mptcp_socket_create(msk, TCP_SYN_SENT); - if (IS_ERR(ssock)) { - err = PTR_ERR(ssock); + ssock = __mptcp_nmpc_socket(msk); + if (!ssock) { + err = -EINVAL; goto unlock; } + mptcp_token_destroy(msk); + inet_sk_state_store(sock->sk, TCP_SYN_SENT); subflow = mptcp_subflow_ctx(ssock->sk); #ifdef CONFIG_TCP_MD5SIG /* no MPTCP if MD5SIG is enabled on this socket or we may run out of @@ -1929,13 +1915,14 @@ static int mptcp_listen(struct socket *sock, int backlog) pr_debug("msk=%p", msk); lock_sock(sock->sk); - mptcp_token_destroy(msk); - ssock = __mptcp_socket_create(msk, TCP_LISTEN); - if (IS_ERR(ssock)) { - err = PTR_ERR(ssock); + ssock = __mptcp_nmpc_socket(msk); + if (!ssock) { + err = -EINVAL; goto unlock; } + mptcp_token_destroy(msk); + inet_sk_state_store(sock->sk, TCP_LISTEN); sock_set_flag(sock->sk, SOCK_RCU_FREE); err = ssock->ops->listen(ssock, backlog);
This clean the code a bit and will simplify the next patch, too. Signed-off-by: Paolo Abeni <pabeni@redhat.com> --- net/mptcp/protocol.c | 53 +++++++++++++++++--------------------------- 1 file changed, 20 insertions(+), 33 deletions(-)