]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - net/core/datagram.c
arp: fixed -Wuninitialized compiler warning
[linux.git] / net / core / datagram.c
index f4947e737f34a0d5dafb2e8232260f46a43fbc27..db1866f2ffcf6e3ed505ce5c1c5a4f11e6a908bd 100644 (file)
@@ -256,8 +256,12 @@ struct sk_buff *__skb_try_recv_datagram(struct sock *sk, unsigned int flags,
                }
 
                spin_unlock_irqrestore(&queue->lock, cpu_flags);
-       } while (sk_can_busy_loop(sk) &&
-                sk_busy_loop(sk, flags & MSG_DONTWAIT));
+
+               if (!sk_can_busy_loop(sk))
+                       break;
+
+               sk_busy_loop(sk, flags & MSG_DONTWAIT);
+       } while (!skb_queue_empty(&sk->sk_receive_queue));
 
        error = -EAGAIN;
 
@@ -760,7 +764,7 @@ int skb_copy_and_csum_datagram_msg(struct sk_buff *skb,
 
        if (msg_data_left(msg) < chunk) {
                if (__skb_checksum_complete(skb))
-                       goto csum_error;
+                       return -EINVAL;
                if (skb_copy_datagram_msg(skb, hlen, msg, chunk))
                        goto fault;
        } else {
@@ -768,15 +772,16 @@ int skb_copy_and_csum_datagram_msg(struct sk_buff *skb,
                if (skb_copy_and_csum_datagram(skb, hlen, &msg->msg_iter,
                                               chunk, &csum))
                        goto fault;
-               if (csum_fold(csum))
-                       goto csum_error;
+
+               if (csum_fold(csum)) {
+                       iov_iter_revert(&msg->msg_iter, chunk);
+                       return -EINVAL;
+               }
+
                if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))
                        netdev_rx_csum_fault(skb->dev);
        }
        return 0;
-csum_error:
-       iov_iter_revert(&msg->msg_iter, chunk);
-       return -EINVAL;
 fault:
        return -EFAULT;
 }