if ((err = sock_create_kern(PF_INET, SOCK_STREAM, IPPROTO_TCP, &sock)) < 0) { dprintk("RPC:      can't create TCP transport socket (%d).\n", -err); goto out; }  if (xprt->resvport && xs_bindresvport(xprt, sock) < 0) { sock_release(sock); goto out; } 
if (xprt->resvport && xs_bindresvport(xprt, sock) < 0) { sock_release(sock); goto out; } } else /* "close" the socket, preserving the local port */ xs_tcp_reuse_connection(xprt); 
static void xs_tcp_connect_worker(void *args){	struct rpc_xprt *xprt = (struct rpc_xprt *)args;	struct socket *sock = xprt->sock;	int err, status = -EIO;	if (xprt->shutdown || xprt->addr.sin_port == 0)		goto out;	dprintk("RPC:      xs_tcp_connect_worker for xprt %p\n", xprt);	/* Start by resetting any existing socket state */	xs_close(xprt);	if ((err = sock_create_kern(PF_INET, SOCK_STREAM, IPPROTO_TCP, &sock)) < 0) {		dprintk("RPC:      can't create TCP transport socket (%d).\n", -err);		goto out;	}	if (xprt->resvport && xs_bindresvport(xprt, sock) < 0) {		sock_release(sock);		goto out;	}	if (!xprt->inet) {		struct sock *sk = sock->sk;		write_lock_bh(&sk->sk_callback_lock);		sk->sk_user_data = xprt;		xprt->old_data_ready = sk->sk_data_ready;		xprt->old_state_change = sk->sk_state_change;		xprt->old_write_space = sk->sk_write_space;		sk->sk_data_ready = xs_tcp_data_ready;		sk->sk_state_change = xs_tcp_state_change;		sk->sk_write_space = xs_tcp_write_space;		tcp_sk(sk)->nonagle = 1;		xprt_clear_connected(xprt);		/* Reset to new socket */		xprt->sock = sock;		xprt->inet = sk;		write_unlock_bh(&sk->sk_callback_lock);	}	/* Tell the socket layer to start connecting... */	status = sock->ops->connect(sock, (struct sockaddr *) &xprt->addr,			sizeof(xprt->addr), O_NONBLOCK);	dprintk("RPC: %p  connect status %d connected %d sock state %d\n",			xprt, -status, xprt_connected(xprt), sock->sk->sk_state);	if (status < 0) {		switch (status) {			case -EINPROGRESS:			case -EALREADY:				goto out_clear;		}	}out:	xprt_wake_pending_tasks(xprt, status);out_clear:	xprt_clear_connecting(xprt);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/3167e12c0c424f3c323944701615343022d86418/xprtsock.c/clean/net/sunrpc/xprtsock.c