diff options
author | KalimochoAz <calimochoazucarado@gmail.com> | 2012-10-14 11:03:07 +0200 |
---|---|---|
committer | KalimochoAz <calimochoazucarado@gmail.com> | 2012-10-14 11:03:07 +0200 |
commit | 8a229ae2d652b42437863787cfc28f7f8a78a35d (patch) | |
tree | 9b3b8f31202f5ec2e3963e48d2cf7afd7a719ac8 /net/ipv4/tcp.c | |
parent | ac5ad2a19b7c3ffa766309c5ef3de0c79fa076c4 (diff) | |
parent | 2e54c4fb47ffcc687457f9bcd9bba895f2a84963 (diff) | |
download | kernel_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.c | 10 |
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. */ |