diff options
Diffstat (limited to 'net/tipc/socket.c')
| -rw-r--r-- | net/tipc/socket.c | 13 | 
1 files changed, 8 insertions, 5 deletions
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 07419f36116a..ebd280e767bd 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c @@ -783,7 +783,7 @@ static __poll_t tipc_poll(struct file *file, struct socket *sock,  	case TIPC_ESTABLISHED:  		if (!tsk->cong_link_cnt && !tsk_conn_cong(tsk))  			revents |= EPOLLOUT; -		/* fall through */ +		fallthrough;  	case TIPC_LISTEN:  	case TIPC_CONNECTING:  		if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) @@ -2597,7 +2597,7 @@ static int tipc_connect(struct socket *sock, struct sockaddr *dest,  		 * case is EINPROGRESS, rather than EALREADY.  		 */  		res = -EINPROGRESS; -		/* fall through */ +		fallthrough;  	case TIPC_CONNECTING:  		if (!timeout) {  			if (previous == TIPC_CONNECTING) @@ -2771,18 +2771,21 @@ static int tipc_shutdown(struct socket *sock, int how)  	trace_tipc_sk_shutdown(sk, NULL, TIPC_DUMP_ALL, " ");  	__tipc_shutdown(sock, TIPC_CONN_SHUTDOWN); -	sk->sk_shutdown = SEND_SHUTDOWN; +	if (tipc_sk_type_connectionless(sk)) +		sk->sk_shutdown = SHUTDOWN_MASK; +	else +		sk->sk_shutdown = SEND_SHUTDOWN;  	if (sk->sk_state == TIPC_DISCONNECTING) {  		/* Discard any unreceived messages */  		__skb_queue_purge(&sk->sk_receive_queue); -		/* Wake up anyone sleeping in poll */ -		sk->sk_state_change(sk);  		res = 0;  	} else {  		res = -ENOTCONN;  	} +	/* Wake up anyone sleeping in poll. */ +	sk->sk_state_change(sk);  	release_sock(sk);  	return res;  | 
