diff options
Diffstat (limited to 'net/unix/af_unix.c')
| -rw-r--r-- | net/unix/af_unix.c | 33 | 
1 files changed, 9 insertions, 24 deletions
| diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index ac1f2bc18fc9..0748e7ea5210 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -782,19 +782,6 @@ static int unix_seqpacket_sendmsg(struct socket *, struct msghdr *, size_t);  static int unix_seqpacket_recvmsg(struct socket *, struct msghdr *, size_t,  				  int); -static int unix_set_peek_off(struct sock *sk, int val) -{ -	struct unix_sock *u = unix_sk(sk); - -	if (mutex_lock_interruptible(&u->iolock)) -		return -EINTR; - -	WRITE_ONCE(sk->sk_peek_off, val); -	mutex_unlock(&u->iolock); - -	return 0; -} -  #ifdef CONFIG_PROC_FS  static int unix_count_nr_fds(struct sock *sk)  { @@ -862,7 +849,7 @@ static const struct proto_ops unix_stream_ops = {  	.read_skb =	unix_stream_read_skb,  	.mmap =		sock_no_mmap,  	.splice_read =	unix_stream_splice_read, -	.set_peek_off =	unix_set_peek_off, +	.set_peek_off =	sk_set_peek_off,  	.show_fdinfo =	unix_show_fdinfo,  }; @@ -886,7 +873,7 @@ static const struct proto_ops unix_dgram_ops = {  	.read_skb =	unix_read_skb,  	.recvmsg =	unix_dgram_recvmsg,  	.mmap =		sock_no_mmap, -	.set_peek_off =	unix_set_peek_off, +	.set_peek_off =	sk_set_peek_off,  	.show_fdinfo =	unix_show_fdinfo,  }; @@ -909,7 +896,7 @@ static const struct proto_ops unix_seqpacket_ops = {  	.sendmsg =	unix_seqpacket_sendmsg,  	.recvmsg =	unix_seqpacket_recvmsg,  	.mmap =		sock_no_mmap, -	.set_peek_off =	unix_set_peek_off, +	.set_peek_off =	sk_set_peek_off,  	.show_fdinfo =	unix_show_fdinfo,  }; @@ -1344,13 +1331,11 @@ static void unix_state_double_lock(struct sock *sk1, struct sock *sk2)  		unix_state_lock(sk1);  		return;  	} -	if (sk1 < sk2) { -		unix_state_lock(sk1); -		unix_state_lock_nested(sk2); -	} else { -		unix_state_lock(sk2); -		unix_state_lock_nested(sk1); -	} +	if (sk1 > sk2) +		swap(sk1, sk2); + +	unix_state_lock(sk1); +	unix_state_lock_nested(sk2, U_LOCK_SECOND);  }  static void unix_state_double_unlock(struct sock *sk1, struct sock *sk2) @@ -1591,7 +1576,7 @@ restart:  		goto out_unlock;  	} -	unix_state_lock_nested(sk); +	unix_state_lock_nested(sk, U_LOCK_SECOND);  	if (sk->sk_state != st) {  		unix_state_unlock(sk); | 
