return msk;
 }
 
-static int __subflow_init_req(struct request_sock *req, const struct sock *sk_listener)
+static void subflow_init_req(struct request_sock *req, const struct sock *sk_listener)
 {
        struct mptcp_subflow_request_sock *subflow_req = mptcp_subflow_rsk(req);
 
        subflow_req->mp_join = 0;
        subflow_req->msk = NULL;
        mptcp_token_init_request(req);
-
-#ifdef CONFIG_TCP_MD5SIG
-       /* no MPTCP if MD5SIG is enabled on this socket or we may run out of
-        * TCP option space.
-        */
-       if (rcu_access_pointer(tcp_sk(sk_listener)->md5sig_info))
-               return -EINVAL;
-#endif
-
-       return 0;
 }
 
 /* Init mptcp request socket.
  * Returns an error code if a JOIN has failed and a TCP reset
  * should be sent.
  */
-static int subflow_init_req(struct request_sock *req,
-                           const struct sock *sk_listener,
-                           struct sk_buff *skb)
+static int subflow_check_req(struct request_sock *req,
+                            const struct sock *sk_listener,
+                            struct sk_buff *skb)
 {
        struct mptcp_subflow_context *listener = mptcp_subflow_ctx(sk_listener);
        struct mptcp_subflow_request_sock *subflow_req = mptcp_subflow_rsk(req);
        struct mptcp_options_received mp_opt;
-       int ret;
 
        pr_debug("subflow_req=%p, listener=%p", subflow_req, listener);
 
-       ret = __subflow_init_req(req, sk_listener);
-       if (ret)
-               return 0;
+#ifdef CONFIG_TCP_MD5SIG
+       /* no MPTCP if MD5SIG is enabled on this socket or we may run out of
+        * TCP option space.
+        */
+       if (rcu_access_pointer(tcp_sk(sk_listener)->md5sig_info))
+               return -EINVAL;
+#endif
 
        mptcp_get_options(skb, &mp_opt);
 
        struct mptcp_options_received mp_opt;
        int err;
 
-       err = __subflow_init_req(req, sk_listener);
-       if (err)
-               return err;
-
+       subflow_init_req(req, sk_listener);
        mptcp_get_options(skb, &mp_opt);
 
        if (mp_opt.mp_capable && mp_opt.mp_join)
        int err;
 
        tcp_rsk(req)->is_mptcp = 1;
+       subflow_init_req(req, sk);
 
        dst = tcp_request_sock_ipv4_ops.route_req(sk, skb, fl, req);
        if (!dst)
                return NULL;
 
-       err = subflow_init_req(req, sk, skb);
+       err = subflow_check_req(req, sk, skb);
        if (err == 0)
                return dst;
 
        int err;
 
        tcp_rsk(req)->is_mptcp = 1;
+       subflow_init_req(req, sk);
 
        dst = tcp_request_sock_ipv6_ops.route_req(sk, skb, fl, req);
        if (!dst)
                return NULL;
 
-       err = subflow_init_req(req, sk, skb);
+       err = subflow_check_req(req, sk, skb);
        if (err == 0)
                return dst;