From: David S. Miller <davem@davemloft.net>
Date: Wed, 5 Nov 2008 11:36:01 +0000 (-0800)
Subject: tcp: Fix recvmsg MSG_PEEK influence of blocking behavior.
X-Git-Tag: v2.6.28-rc4~22^2~2
X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=518a09ef11f8454f4676125d47c3e775b300c6a5;p=linux-2.6-omap-h63xx.git

tcp: Fix recvmsg MSG_PEEK influence of blocking behavior.

Vito Caputo noticed that tcp_recvmsg() returns immediately from
partial reads when MSG_PEEK is used.  In particular, this means that
SO_RCVLOWAT is not respected.

Simply remove the test.  And this matches the behavior of several
other systems, including BSD.

Signed-off-by: David S. Miller <davem@davemloft.net>
---

diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index eccb7165a80..c5aca0bb116 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -1374,8 +1374,7 @@ int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
 			    sk->sk_state == TCP_CLOSE ||
 			    (sk->sk_shutdown & RCV_SHUTDOWN) ||
 			    !timeo ||
-			    signal_pending(current) ||
-			    (flags & MSG_PEEK))
+			    signal_pending(current))
 				break;
 		} else {
 			if (sock_flag(sk, SOCK_DONE))