* tcpfying x25_connect Signed-off-by: Aristeu Sergio Rozanski Filho Index: net/x25/af_x25.c =================================================================== --- net/x25/af_x25.c (revision 69) +++ net/x25/af_x25.c (revision 70) @@ -58,6 +58,7 @@ #include #include #include +#include #include int sysctl_x25_restart_request_timeout = X25_DEFAULT_T20; @@ -551,85 +552,6 @@ return 0; } -static int x25_wait_for_connection_establishment(struct sock *sk) -{ - DECLARE_WAITQUEUE(wait, current); - int rc; - - add_wait_queue_exclusive(sk->sk_sleep, &wait); - for (;;) { - __set_current_state(TASK_INTERRUPTIBLE); - rc = -ERESTARTSYS; - if (signal_pending(current)) - break; - rc = sock_error(sk); - if (rc) { - sk->sk_socket->state = SS_UNCONNECTED; - break; - } - rc = 0; - if (sk->sk_state != TCP_ESTABLISHED) { - release_sock(sk); - schedule(); - lock_sock(sk); - } else - break; - } - __set_current_state(TASK_RUNNING); - remove_wait_queue(sk->sk_sleep, &wait); - return rc; -} - -static int x25_connect(struct socket *sock, struct sockaddr *uaddr, - int addr_len, int flags) -{ - struct sock *sk = sock->sk; - int rc = 0; - - lock_sock(sk); - if (sk->sk_state == TCP_ESTABLISHED && sock->state == SS_CONNECTING) { - sock->state = SS_CONNECTED; - goto out; /* Connect completed during a ERESTARTSYS event */ - } - - rc = -ECONNREFUSED; - if (sk->sk_state == TCP_CLOSE && sock->state == SS_CONNECTING) { - sock->state = SS_UNCONNECTED; - goto out; - } - - rc = -EISCONN; /* No reconnect on a seqpacket socket */ - if (sk->sk_state == TCP_ESTABLISHED) - goto out; - - sk->sk_state = TCP_CLOSE; - sock->state = SS_UNCONNECTED; - - rc = sk->sk_prot->connect(sk, uaddr, addr_len); - if (rc) { - goto out; - } - - /* Move to connecting socket, start sending Connect Requests */ - sock->state = SS_CONNECTING; - sk->sk_state = TCP_SYN_SENT; - - /* Now the loop */ - rc = -EINPROGRESS; - if (sk->sk_state != TCP_ESTABLISHED && (flags & O_NONBLOCK)) - goto out; - - rc = x25_wait_for_connection_establishment(sk); - if (rc) - goto out; - - sock->state = SS_CONNECTED; - rc = 0; -out: - release_sock(sk); - return rc; -} - static int x25_wait_for_data(struct sock *sk, int timeout) { DECLARE_WAITQUEUE(wait, current); @@ -1238,7 +1160,7 @@ .owner = THIS_MODULE, .release = x25_release, .bind = x25_bind, - .connect = x25_connect, + .connect = inet_stream_connect, .socketpair = sock_no_socketpair, .accept = x25_accept, .getname = x25_getname,