aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2008-02-26 00:40:51 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2008-02-29 02:26:27 -0500
commitff2d7db848f8db7cade39e55f78f86d77e0de01a (patch)
treefb40ecbcad821ec6e31f4324c0483e13242f36c7 /net/sunrpc
parentf5fb7b06e4e4ab18326f067f4317b2016ce18af2 (diff)
SUNRPC: Ensure that we read all available tcp data
Don't stop until we run out of data, or we hit an error. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net/sunrpc')
-rw-r--r--net/sunrpc/xprtsock.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c
index 30e7ac243a90..8bd3b0f73ac0 100644
--- a/net/sunrpc/xprtsock.c
+++ b/net/sunrpc/xprtsock.c
@@ -1073,6 +1073,7 @@ static void xs_tcp_data_ready(struct sock *sk, int bytes)
1073{ 1073{
1074 struct rpc_xprt *xprt; 1074 struct rpc_xprt *xprt;
1075 read_descriptor_t rd_desc; 1075 read_descriptor_t rd_desc;
1076 int read;
1076 1077
1077 dprintk("RPC: xs_tcp_data_ready...\n"); 1078 dprintk("RPC: xs_tcp_data_ready...\n");
1078 1079
@@ -1084,8 +1085,10 @@ static void xs_tcp_data_ready(struct sock *sk, int bytes)
1084 1085
1085 /* We use rd_desc to pass struct xprt to xs_tcp_data_recv */ 1086 /* We use rd_desc to pass struct xprt to xs_tcp_data_recv */
1086 rd_desc.arg.data = xprt; 1087 rd_desc.arg.data = xprt;
1087 rd_desc.count = 65536; 1088 do {
1088 tcp_read_sock(sk, &rd_desc, xs_tcp_data_recv); 1089 rd_desc.count = 65536;
1090 read = tcp_read_sock(sk, &rd_desc, xs_tcp_data_recv);
1091 } while (read > 0);
1089out: 1092out:
1090 read_unlock(&sk->sk_callback_lock); 1093 read_unlock(&sk->sk_callback_lock);
1091} 1094}