Currently, tcp_recvmsg enters a busy loop in sk_wait_data if called with flags = MSG_WAITALL | MSG_PEEK. sk_wait_data waits for sk_receive_queue not empty, but in this case, the receive queue is not empty, but does not contain any skb that we can use. Add a "last skb seen on receive queue" argument to sk_wait_data, so that it sleeps until the receive queue has new skbs. Link: https://bugzilla.kernel.org/show_bug.cgi?id=99461 Link: https://sourceware.org/bugzilla/show_bug.cgi?id=18493 Link: https://bugzilla.redhat.com/show_bug.cgi?id=1205258 Reported-by: Enrico Scholz <rh-bugzilla@ensc.de> Reported-by: Dan Searle <dan@censornet.com> Signed-off-by: Sabrina Dubroca <sd@queasysnail.net> Acked-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net> |
||
|---|---|---|
| .. | ||
| af_llc.c | ||
| Kconfig | ||
| llc_c_ac.c | ||
| llc_c_ev.c | ||
| llc_c_st.c | ||
| llc_conn.c | ||
| llc_core.c | ||
| llc_if.c | ||
| llc_input.c | ||
| llc_output.c | ||
| llc_pdu.c | ||
| llc_proc.c | ||
| llc_s_ac.c | ||
| llc_s_ev.c | ||
| llc_s_st.c | ||
| llc_sap.c | ||
| llc_station.c | ||
| Makefile | ||
| sysctl_net_llc.c | ||