Michal Kubeček 15c041759b tcp: flush DMA queue before sk_wait_data if rcv_wnd is zero
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>
2012-09-19 16:07:58 -04:00
..
2012-04-15 12:37:19 -04:00
2012-07-16 22:31:34 -07:00
2012-04-15 12:37:19 -04:00
2011-10-19 03:10:46 -04:00
2012-07-30 14:53:21 -07:00
2012-07-31 18:42:43 -07:00
2012-07-19 10:55:36 -07:00
2012-01-20 14:17:26 -05:00
2012-01-20 14:17:26 -05:00
2012-07-19 10:55:36 -07:00
2012-05-17 14:59:59 -04:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2012-03-11 23:42:51 -07:00
2012-07-16 22:31:34 -07:00
2012-04-15 12:37:19 -04:00