]> err.no Git - linux-2.6/blobdiff - net/ipv4/udp.c
[ARP]: Minus one level of ndentation in arp_req_delete
[linux-2.6] / net / ipv4 / udp.c
index 78cfcb4a1b3fc0d69718392b6252c816fe445b6c..9ed6393c65d976298a4fb9ddca046cc8b4e338f5 100644 (file)
@@ -827,6 +827,7 @@ int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
        struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name;
        struct sk_buff *skb;
        unsigned int ulen, copied;
+       int peeked;
        int err;
        int is_udplite = IS_UDPLITE(sk);
 
@@ -840,7 +841,8 @@ int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
                return ip_recv_error(sk, msg, len);
 
 try_again:
-       skb = skb_recv_datagram(sk, flags, noblock, &err);
+       skb = __skb_recv_datagram(sk, flags | (noblock ? MSG_DONTWAIT : 0),
+                                 &peeked, &err);
        if (!skb)
                goto out;
 
@@ -875,7 +877,8 @@ try_again:
        if (err)
                goto out_free;
 
-       UDP_INC_STATS_USER(UDP_MIB_INDATAGRAMS, is_udplite);
+       if (!peeked)
+               UDP_INC_STATS_USER(UDP_MIB_INDATAGRAMS, is_udplite);
 
        sock_recv_timestamp(msg, sk, skb);