diff options
Diffstat (limited to 'net/ipv4/af_inet.c')
| -rw-r--r-- | net/ipv4/af_inet.c | 4 | 
1 files changed, 3 insertions, 1 deletions
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 940062e08f57..4a76ebf793b8 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -586,6 +586,7 @@ static long inet_wait_for_connect(struct sock *sk, long timeo, int writebias)  	add_wait_queue(sk_sleep(sk), &wait);  	sk->sk_write_pending += writebias; +	sk->sk_wait_pending++;  	/* Basic assumption: if someone sets sk->sk_err, he _must_  	 * change state of the socket from TCP_SYN_*. @@ -601,6 +602,7 @@ static long inet_wait_for_connect(struct sock *sk, long timeo, int writebias)  	}  	remove_wait_queue(sk_sleep(sk), &wait);  	sk->sk_write_pending -= writebias; +	sk->sk_wait_pending--;  	return timeo;  } @@ -894,7 +896,7 @@ int inet_shutdown(struct socket *sock, int how)  		   EPOLLHUP, even on eg. unconnected UDP sockets -- RR */  		fallthrough;  	default: -		sk->sk_shutdown |= how; +		WRITE_ONCE(sk->sk_shutdown, sk->sk_shutdown | how);  		if (sk->sk_prot->shutdown)  			sk->sk_prot->shutdown(sk, how);  		break;  | 
