diff options
author | Michal Kubeček <mkubecek@suse.cz> | 2012-09-14 04:59:52 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-09-19 16:07:58 -0400 |
commit | 15c041759bfcd9ab0a4e43f1c16e2644977d0467 (patch) | |
tree | c530b3395136fc4c29ff022200adf5d948ce5bc8 /net/sched/sch_fq_codel.c | |
parent | dbd6b11e15a2f96030da17dbeda943a8a98ee990 (diff) | |
download | linux-15c041759bfcd9ab0a4e43f1c16e2644977d0467.tar.gz |
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>
Diffstat (limited to 'net/sched/sch_fq_codel.c')
0 files changed, 0 insertions, 0 deletions