X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=net%2Fcore%2Fsock.c;h=88bf810394a5521de83aaa7095543a208aa60573;hb=92046e83c07b064ca65ac4ae7660a540016bdfc1;hp=147fb2656e6bb92f8a0d809c39282e85878e447f;hpb=fa7178b0f12e55a4f2d4906df3f25d6d4f88d962;p=thirdparty%2Flinux.git diff --git a/net/core/sock.c b/net/core/sock.c index 147fb2656e6b..88bf810394a5 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -107,6 +107,7 @@ #include #include #include +#include #include #include #include @@ -4154,8 +4155,14 @@ bool sk_busy_loop_end(void *p, unsigned long start_time) { struct sock *sk = p; - return !skb_queue_empty_lockless(&sk->sk_receive_queue) || - sk_busy_loop_timeout(sk, start_time); + if (!skb_queue_empty_lockless(&sk->sk_receive_queue)) + return true; + + if (sk_is_udp(sk) && + !skb_queue_empty_lockless(&udp_sk(sk)->reader_queue)) + return true; + + return sk_busy_loop_timeout(sk, start_time); } EXPORT_SYMBOL(sk_busy_loop_end); #endif /* CONFIG_NET_RX_BUSY_POLL */