Files
linux/net/ipv4
Michal Kubeček 75cb41f8ea tcp: flush DMA queue before sk_wait_data if rcv_wnd is zero
[ Upstream commit 15c041759b ]

If recv() syscall is called for a TCP socket so that
  - IOAT DMA is used
  - MSG_WAITALL flag is used
  - requested length is bigger than sk_rcvbuf
  - enough data has already arrived to bring rcv_wnd to zero
then when tcp_recvmsg() gets to calling sk_wait_data(), receive
window can be still zero while sk_async_wait_queue exhausts
enough space to keep it zero. As this queue isn't cleaned until
the tcp_service_net_dma() call, sk_wait_data() cannot receive
any data and blocks forever.

If zero receive window and non-empty sk_async_wait_queue is
detected before calling sk_wait_data(), process the queue first.

Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-10-13 05:28:06 +09:00
..
2012-02-03 09:18:54 -08:00
2011-03-12 15:08:49 -08:00
2011-08-15 18:31:39 -07:00
2011-02-01 15:35:25 -08:00
2011-05-24 01:13:12 -04:00
2012-02-29 16:34:18 -08:00
2012-03-23 11:20:51 -07:00
2011-05-17 14:16:58 -04:00
2012-03-23 11:20:51 -07:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2010-10-27 11:37:32 -07:00
2011-07-07 00:27:05 -07:00
2010-07-12 12:57:54 -07:00