aboutsummaryrefslogtreecommitdiff
path: root/net/ipv4/tcp.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2017-02-16 19:51:27 +0100
committerThomas Gleixner <tglx@linutronix.de>2017-02-16 19:51:27 +0100
commit5b1ad68f9b1951ef78312d2935906cc8a8bd2e12 (patch)
treee81b71c961e885cef0d3992e083acec845166870 /net/ipv4/tcp.c
parent1013fe32a63d1139b1b32049ea46c0c462738d8b (diff)
parent7089db84e356562f8ba737c29e472cc42d530dbc (diff)
Merge branch 'linus' into x86/mm
Make sure to get the latest fixes before applying the ptdump enhancements.
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 4a044964da66..0efb4c7f6704 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -770,6 +770,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);