diff options
Diffstat (limited to 'net/core/sock.c')
| -rw-r--r-- | net/core/sock.c | 19 | 
1 files changed, 8 insertions, 11 deletions
diff --git a/net/core/sock.c b/net/core/sock.c index 1e4dd54bfb5a..0d91f7dca751 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -433,8 +433,6 @@ static bool sock_needs_netstamp(const struct sock *sk)  	}  } -#define SK_FLAGS_TIMESTAMP ((1UL << SOCK_TIMESTAMP) | (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE)) -  static void sock_disable_timestamp(struct sock *sk, unsigned long flags)  {  	if (sk->sk_flags & flags) { @@ -874,7 +872,8 @@ set_rcvbuf:  		if (val & SOF_TIMESTAMPING_OPT_ID &&  		    !(sk->sk_tsflags & SOF_TIMESTAMPING_OPT_ID)) { -			if (sk->sk_protocol == IPPROTO_TCP) { +			if (sk->sk_protocol == IPPROTO_TCP && +			    sk->sk_type == SOCK_STREAM) {  				if (sk->sk_state != TCP_ESTABLISHED) {  					ret = -EINVAL;  					break; @@ -1530,7 +1529,6 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)  		skb_queue_head_init(&newsk->sk_receive_queue);  		skb_queue_head_init(&newsk->sk_write_queue); -		spin_lock_init(&newsk->sk_dst_lock);  		rwlock_init(&newsk->sk_callback_lock);  		lockdep_set_class_and_name(&newsk->sk_callback_lock,  				af_callback_keys + newsk->sk_family, @@ -1553,7 +1551,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)  			 */  			is_charged = sk_filter_charge(newsk, filter); -		if (unlikely(!is_charged || xfrm_sk_clone_policy(newsk))) { +		if (unlikely(!is_charged || xfrm_sk_clone_policy(newsk, sk))) {  			/* It is still raw copy of parent, so invalidate  			 * destructor and make plain sk_free() */  			newsk->sk_destruct = NULL; @@ -1607,7 +1605,7 @@ void sk_setup_caps(struct sock *sk, struct dst_entry *dst)  {  	u32 max_segs = 1; -	__sk_dst_set(sk, dst); +	sk_dst_set(sk, dst);  	sk->sk_route_caps = dst->dev->features;  	if (sk->sk_route_caps & NETIF_F_GSO)  		sk->sk_route_caps |= NETIF_F_GSO_SOFTWARE; @@ -1815,7 +1813,7 @@ static long sock_wait_for_wmem(struct sock *sk, long timeo)  {  	DEFINE_WAIT(wait); -	clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags); +	sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk);  	for (;;) {  		if (!timeo)  			break; @@ -1861,7 +1859,7 @@ struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len,  		if (sk_wmem_alloc_get(sk) < sk->sk_sndbuf)  			break; -		set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags); +		sk_set_bit(SOCKWQ_ASYNC_NOSPACE, sk);  		set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);  		err = -EAGAIN;  		if (!timeo) @@ -2048,9 +2046,9 @@ int sk_wait_data(struct sock *sk, long *timeo, const struct sk_buff *skb)  	DEFINE_WAIT(wait);  	prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); -	set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); +	sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);  	rc = sk_wait_event(sk, timeo, skb_peek_tail(&sk->sk_receive_queue) != skb); -	clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); +	sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk);  	finish_wait(sk_sleep(sk), &wait);  	return rc;  } @@ -2388,7 +2386,6 @@ void sock_init_data(struct socket *sock, struct sock *sk)  	} else  		sk->sk_wq	=	NULL; -	spin_lock_init(&sk->sk_dst_lock);  	rwlock_init(&sk->sk_callback_lock);  	lockdep_set_class_and_name(&sk->sk_callback_lock,  			af_callback_keys + sk->sk_family,  | 
