diff options
Diffstat (limited to 'net/ipv4/tcp.c')
| -rw-r--r-- | net/ipv4/tcp.c | 9 | 
1 files changed, 5 insertions, 4 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index c82dc42f57c6..d20b62d52171 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -279,6 +279,7 @@  #include <linux/uaccess.h>  #include <asm/ioctls.h>  #include <net/busy_poll.h> +#include <net/rps.h>  /* Track pending CMSGs. */  enum { @@ -974,7 +975,7 @@ int tcp_wmem_schedule(struct sock *sk, int copy)  	 * Use whatever is left in sk->sk_forward_alloc and tcp_wmem[0]  	 * to guarantee some progress.  	 */ -	left = sock_net(sk)->ipv4.sysctl_tcp_wmem[0] - sk->sk_wmem_queued; +	left = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_wmem[0]) - sk->sk_wmem_queued;  	if (left > 0)  		sk_forced_mem_schedule(sk, min(left, copy));  	return min(copy, sk->sk_forward_alloc); @@ -4010,11 +4011,11 @@ int do_tcp_getsockopt(struct sock *sk, int level,  	if (copy_from_sockptr(&len, optlen, sizeof(int)))  		return -EFAULT; -	len = min_t(unsigned int, len, sizeof(int)); -  	if (len < 0)  		return -EINVAL; +	len = min_t(unsigned int, len, sizeof(int)); +  	switch (optname) {  	case TCP_MAXSEG:  		val = tp->mss_cache; @@ -4651,7 +4652,7 @@ static void __init tcp_struct_check(void)  	CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, tsorted_sent_queue);  	CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, highest_sack);  	CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_tx, ecn_flags); -	CACHELINE_ASSERT_GROUP_SIZE(struct tcp_sock, tcp_sock_write_tx, 113); +	CACHELINE_ASSERT_GROUP_SIZE(struct tcp_sock, tcp_sock_write_tx, 105);  	/* TXRX read-write hotpath cache lines */  	CACHELINE_ASSERT_GROUP_MEMBER(struct tcp_sock, tcp_sock_write_txrx, pred_flags);  |