From 54157695f8ac97f65858675c784700e987a07af9 Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Tue, 17 Aug 2010 11:00:04 +0000 Subject: [PATCH] --- yaml --- r: 213819 b: refs/heads/master c: 3720d40b201fe82dce1d8a64a31bfbf49c221771 h: refs/heads/master i: 213817: e32800d5e5a563211fe0d496a4b49b0d202bbfb3 213815: fded766604bd1a397c7fc46d85cb691c1baea2aa v: v3 --- [refs] | 2 +- trunk/net/tipc/socket.c | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index f8280016ac75..d58d7b78d235 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f81380925209bc60732a57eef41ab440c056aacf +refs/heads/master: 3720d40b201fe82dce1d8a64a31bfbf49c221771 diff --git a/trunk/net/tipc/socket.c b/trunk/net/tipc/socket.c index 66e889ba48fd..69d0fd1f3920 100644 --- a/trunk/net/tipc/socket.c +++ b/trunk/net/tipc/socket.c @@ -1026,9 +1026,8 @@ static int recv_stream(struct kiocb *iocb, struct socket *sock, struct sk_buff *buf; struct tipc_msg *msg; unsigned int sz; - int sz_to_copy; + int sz_to_copy, target, needed; int sz_copied = 0; - int needed; char __user *crs = m->msg_iov->iov_base; unsigned char *buf_crs; u32 err; @@ -1050,6 +1049,8 @@ static int recv_stream(struct kiocb *iocb, struct socket *sock, goto exit; } + target = sock_rcvlowat(sk, flags & MSG_WAITALL, buf_len); + restart: /* Look for a message in receive queue; wait if necessary */ @@ -1138,7 +1139,7 @@ static int recv_stream(struct kiocb *iocb, struct socket *sock, if ((sz_copied < buf_len) && /* didn't get all requested data */ (!skb_queue_empty(&sk->sk_receive_queue) || - (flags & MSG_WAITALL)) && /* and more is ready or required */ + (sz_copied < target)) && /* and more is ready or required */ (!(flags & MSG_PEEK)) && /* and aren't just peeking at data */ (!err)) /* and haven't reached a FIN */ goto restart;