diff options
Diffstat (limited to 'net/ipv4/tcp.c')
| -rw-r--r-- | net/ipv4/tcp.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 4475b3bb494d..97c8f5620c43 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -1044,7 +1044,8 @@ void tcp_free_fastopen_req(struct tcp_sock *tp)  	}  } -static int tcp_sendmsg_fastopen(struct sock *sk, struct msghdr *msg, int *size) +static int tcp_sendmsg_fastopen(struct sock *sk, struct msghdr *msg, +				int *copied, size_t size)  {  	struct tcp_sock *tp = tcp_sk(sk);  	int err, flags; @@ -1059,11 +1060,12 @@ static int tcp_sendmsg_fastopen(struct sock *sk, struct msghdr *msg, int *size)  	if (unlikely(tp->fastopen_req == NULL))  		return -ENOBUFS;  	tp->fastopen_req->data = msg; +	tp->fastopen_req->size = size;  	flags = (msg->msg_flags & MSG_DONTWAIT) ? O_NONBLOCK : 0;  	err = __inet_stream_connect(sk->sk_socket, msg->msg_name,  				    msg->msg_namelen, flags); -	*size = tp->fastopen_req->copied; +	*copied = tp->fastopen_req->copied;  	tcp_free_fastopen_req(tp);  	return err;  } @@ -1083,7 +1085,7 @@ int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,  	flags = msg->msg_flags;  	if (flags & MSG_FASTOPEN) { -		err = tcp_sendmsg_fastopen(sk, msg, &copied_syn); +		err = tcp_sendmsg_fastopen(sk, msg, &copied_syn, size);  		if (err == -EINPROGRESS && copied_syn > 0)  			goto out;  		else if (err) @@ -2229,7 +2231,7 @@ adjudge_to_death:  	/*	This is a (useful) BSD violating of the RFC. There is a  	 *	problem with TCP as specified in that the other end could  	 *	keep a socket open forever with no application left this end. -	 *	We use a 3 minute timeout (about the same as BSD) then kill +	 *	We use a 1 minute timeout (about the same as BSD) then kill  	 *	our end. If they send after that then tough - BUT: long enough  	 *	that we won't make the old 4*rto = almost no time - whoops  	 *	reset mistake.  | 
