aboutsummaryrefslogtreecommitdiff
path: root/net/ipv4/tcp.c
diff options
context:
space:
mode:
authorAlex Shi <alex.shi@linaro.org>2017-02-24 12:03:21 +0800
committerAlex Shi <alex.shi@linaro.org>2017-02-24 12:03:21 +0800
commitba0cfa06c512552bdba8264b46b006478253f39b (patch)
tree803ecd2eddc27a45fe41691a2ac058f59051fe9d /net/ipv4/tcp.c
parent26c815656d14b133b04936f384f5a55fceb2e835 (diff)
parentaedb4a24b9ae4fbd6ced45ae64ae3d84b423f5c2 (diff)
Merge branch 'linux-linaro-lsk-v4.4' into linux-linaro-lsk-v4.4-android
Diffstat (limited to 'net/ipv4/tcp.c')
-rw-r--r--net/ipv4/tcp.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index dc173e0d2184..dd2a41b999d4 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -783,6 +783,12 @@ ssize_t tcp_splice_read(struct socket *sock, loff_t *ppos,
ret = -EAGAIN;
break;
}
+ /* if __tcp_splice_read() got nothing while we have
+ * an skb in receive queue, we do not want to loop.
+ * This might happen with URG data.
+ */
+ if (!skb_queue_empty(&sk->sk_receive_queue))
+ break;
sk_wait_data(sk, &timeo, NULL);
if (signal_pending(current)) {
ret = sock_intr_errno(timeo);