aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp.c
diff options
context:
space:
mode:
authorKalimochoAz <calimochoazucarado@gmail.com>2012-10-14 11:03:07 +0200
committerKalimochoAz <calimochoazucarado@gmail.com>2012-10-14 11:03:07 +0200
commit8a229ae2d652b42437863787cfc28f7f8a78a35d (patch)
tree9b3b8f31202f5ec2e3963e48d2cf7afd7a719ac8 /net/ipv4/tcp.c
parentac5ad2a19b7c3ffa766309c5ef3de0c79fa076c4 (diff)
parent2e54c4fb47ffcc687457f9bcd9bba895f2a84963 (diff)
downloadkernel_samsung_crespo-8a229ae2d652b42437863787cfc28f7f8a78a35d.zip
kernel_samsung_crespo-8a229ae2d652b42437863787cfc28f7f8a78a35d.tar.gz
kernel_samsung_crespo-8a229ae2d652b42437863787cfc28f7f8a78a35d.tar.bz2
Merge commit '2e54c4f' into HEAD
Diffstat (limited to 'net/ipv4/tcp.c')
-rw-r--r--net/ipv4/tcp.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 4a2d6f5..08d2244 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -1602,8 +1602,14 @@ int tcp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
}
#ifdef CONFIG_NET_DMA
- if (tp->ucopy.dma_chan)
- dma_async_memcpy_issue_pending(tp->ucopy.dma_chan);
+ if (tp->ucopy.dma_chan) {
+ if (tp->rcv_wnd == 0 &&
+ !skb_queue_empty(&sk->sk_async_wait_queue)) {
+ tcp_service_net_dma(sk, true);
+ tcp_cleanup_rbuf(sk, copied);
+ } else
+ dma_async_memcpy_issue_pending(tp->ucopy.dma_chan);
+ }
#endif
if (copied >= target) {
/* Do not sleep, just process backlog. */