|
@@ -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);
|