aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/unix/af_unix.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 45aebd966978..a4631477cedf 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -2256,14 +2256,7 @@ static int unix_stream_read_generic(struct unix_stream_read_state *state)
2256 /* Lock the socket to prevent queue disordering 2256 /* Lock the socket to prevent queue disordering
2257 * while sleeps in memcpy_tomsg 2257 * while sleeps in memcpy_tomsg
2258 */ 2258 */
2259 err = mutex_lock_interruptible(&u->readlock); 2259 mutex_lock(&u->readlock);
2260 if (unlikely(err)) {
2261 /* recvmsg() in non blocking mode is supposed to return -EAGAIN
2262 * sk_rcvtimeo is not honored by mutex_lock_interruptible()
2263 */
2264 err = noblock ? -EAGAIN : -ERESTARTSYS;
2265 goto out;
2266 }
2267 2260
2268 if (flags & MSG_PEEK) 2261 if (flags & MSG_PEEK)
2269 skip = sk_peek_offset(sk, flags); 2262 skip = sk_peek_offset(sk, flags);
@@ -2307,12 +2300,12 @@ again:
2307 timeo = unix_stream_data_wait(sk, timeo, last, 2300 timeo = unix_stream_data_wait(sk, timeo, last,
2308 last_len); 2301 last_len);
2309 2302
2310 if (signal_pending(current) || 2303 if (signal_pending(current)) {
2311 mutex_lock_interruptible(&u->readlock)) {
2312 err = sock_intr_errno(timeo); 2304 err = sock_intr_errno(timeo);
2313 goto out; 2305 goto out;
2314 } 2306 }
2315 2307
2308 mutex_lock(&u->readlock);
2316 continue; 2309 continue;
2317unlock: 2310unlock:
2318 unix_state_unlock(sk); 2311 unix_state_unlock(sk);