diff options
-rw-r--r-- | net/ipv4/udp.c | 6 | ||||
-rw-r--r-- | net/ipv6/udp.c | 6 |
2 files changed, 4 insertions, 8 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 7949b5d1663f..5f8c20b67da2 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -1251,10 +1251,8 @@ csum_copy_err: UDP_INC_STATS_USER(sock_net(sk), UDP_MIB_INERRORS, is_udplite); unlock_sock_fast(sk, slow); - if (noblock) - return -EAGAIN; - - /* starting over for a new packet */ + /* starting over for a new packet, but check if we need to yield */ + cond_resched(); msg->msg_flags &= ~MSG_TRUNC; goto try_again; } diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index ef9052f8c90b..2f99b12b717e 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -451,10 +451,8 @@ csum_copy_err: } unlock_sock_fast(sk, slow); - if (noblock) - return -EAGAIN; - - /* starting over for a new packet */ + /* starting over for a new packet, but check if we need to yield */ + cond_resched(); msg->msg_flags &= ~MSG_TRUNC; goto try_again; } |