diff options
Diffstat (limited to 'net/core/stream.c')
| -rw-r--r-- | net/core/stream.c | 12 | 
1 files changed, 6 insertions, 6 deletions
diff --git a/net/core/stream.c b/net/core/stream.c index 434446ab14c5..f5c4e47df165 100644 --- a/net/core/stream.c +++ b/net/core/stream.c @@ -73,8 +73,8 @@ int sk_stream_wait_connect(struct sock *sk, long *timeo_p)  		add_wait_queue(sk_sleep(sk), &wait);  		sk->sk_write_pending++;  		done = sk_wait_event(sk, timeo_p, -				     !sk->sk_err && -				     !((1 << sk->sk_state) & +				     !READ_ONCE(sk->sk_err) && +				     !((1 << READ_ONCE(sk->sk_state)) &  				       ~(TCPF_ESTABLISHED | TCPF_CLOSE_WAIT)), &wait);  		remove_wait_queue(sk_sleep(sk), &wait);  		sk->sk_write_pending--; @@ -87,9 +87,9 @@ EXPORT_SYMBOL(sk_stream_wait_connect);   * sk_stream_closing - Return 1 if we still have things to send in our buffers.   * @sk: socket to verify   */ -static inline int sk_stream_closing(struct sock *sk) +static int sk_stream_closing(const struct sock *sk)  { -	return (1 << sk->sk_state) & +	return (1 << READ_ONCE(sk->sk_state)) &  	       (TCPF_FIN_WAIT1 | TCPF_CLOSING | TCPF_LAST_ACK);  } @@ -142,8 +142,8 @@ int sk_stream_wait_memory(struct sock *sk, long *timeo_p)  		set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);  		sk->sk_write_pending++; -		sk_wait_event(sk, ¤t_timeo, sk->sk_err || -						  (sk->sk_shutdown & SEND_SHUTDOWN) || +		sk_wait_event(sk, ¤t_timeo, READ_ONCE(sk->sk_err) || +						  (READ_ONCE(sk->sk_shutdown) & SEND_SHUTDOWN) ||  						  (sk_stream_memory_free(sk) &&  						  !vm_wait), &wait);  		sk->sk_write_pending--;  | 
