diff options
Diffstat (limited to 'net/ipv4/udp.c')
-rw-r--r-- | net/ipv4/udp.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 29ebb0d27a1e..ebaaa7f973d7 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
@@ -561,12 +561,18 @@ static int udp_push_pending_frames(struct sock *sk) | |||
561 | 561 | ||
562 | send: | 562 | send: |
563 | err = ip_push_pending_frames(sk); | 563 | err = ip_push_pending_frames(sk); |
564 | if (err) { | ||
565 | if (err == -ENOBUFS && !inet->recverr) { | ||
566 | UDP_INC_STATS_USER(sock_net(sk), | ||
567 | UDP_MIB_SNDBUFERRORS, is_udplite); | ||
568 | err = 0; | ||
569 | } | ||
570 | } else | ||
571 | UDP_INC_STATS_USER(sock_net(sk), | ||
572 | UDP_MIB_OUTDATAGRAMS, is_udplite); | ||
564 | out: | 573 | out: |
565 | up->len = 0; | 574 | up->len = 0; |
566 | up->pending = 0; | 575 | up->pending = 0; |
567 | if (!err) | ||
568 | UDP_INC_STATS_USER(sock_net(sk), | ||
569 | UDP_MIB_OUTDATAGRAMS, is_udplite); | ||
570 | return err; | 576 | return err; |
571 | } | 577 | } |
572 | 578 | ||