struct socket *sock)
 {
        struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
+       struct net *net = sock_net(sock->sk);
+       unsigned long connect_timeout;
+       unsigned long syn_retries;
        unsigned int keepidle;
        unsigned int keepcnt;
        unsigned int timeo;
+       unsigned long t;
 
        spin_lock(&xprt->transport_lock);
        keepidle = DIV_ROUND_UP(xprt->timeout->to_initval, HZ);
 
        /* TCP user timeout (see RFC5482) */
        tcp_sock_set_user_timeout(sock->sk, timeo);
+
+       /* Connect timeout */
+       connect_timeout = max_t(unsigned long,
+                               DIV_ROUND_UP(xprt->connect_timeout, HZ), 1);
+       syn_retries = max_t(unsigned long,
+                           READ_ONCE(net->ipv4.sysctl_tcp_syn_retries), 1);
+       for (t = 0; t <= syn_retries && (1UL << t) < connect_timeout; t++)
+               ;
+       if (t <= syn_retries)
+               tcp_sock_set_syncnt(sock->sk, t - 1);
 }
 
 static void xs_tcp_set_connect_timeout(struct rpc_xprt *xprt,