rk: revert to v3.10
[firefly-linux-kernel-4.4.55.git] / net / core / datagram.c
index 052b71c5b1b4ce2864cf195357dda0ef787eb32a..b71423db77851eed9bd91f06a6ac0630f967a3e5 100644 (file)
@@ -128,35 +128,6 @@ out_noerr:
        goto out;
 }
 
-static struct sk_buff *skb_set_peeked(struct sk_buff *skb)
-{
-       struct sk_buff *nskb;
-
-       if (skb->peeked)
-               return skb;
-
-       /* We have to unshare an skb before modifying it. */
-       if (!skb_shared(skb))
-               goto done;
-
-       nskb = skb_clone(skb, GFP_ATOMIC);
-       if (!nskb)
-               return ERR_PTR(-ENOMEM);
-
-       skb->prev->next = nskb;
-       skb->next->prev = nskb;
-       nskb->prev = skb->prev;
-       nskb->next = skb->next;
-
-       consume_skb(skb);
-       skb = nskb;
-
-done:
-       skb->peeked = 1;
-
-       return skb;
-}
-
 /**
  *     __skb_recv_datagram - Receive a datagram skbuff
  *     @sk: socket
@@ -191,9 +162,7 @@ done:
 struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags,
                                    int *peeked, int *off, int *err)
 {
-       struct sk_buff_head *queue = &sk->sk_receive_queue;
        struct sk_buff *skb, *last;
-       unsigned long cpu_flags;
        long timeo;
        /*
         * Caller is allowed not to check sk->sk_err before skb_recv_datagram()
@@ -212,6 +181,8 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags,
                 * Look at current nfs client by the way...
                 * However, this function was correct in any case. 8)
                 */
+               unsigned long cpu_flags;
+               struct sk_buff_head *queue = &sk->sk_receive_queue;
                int _off = *off;
 
                last = (struct sk_buff *)queue;
@@ -225,12 +196,7 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags,
                                        _off -= skb->len;
                                        continue;
                                }
-
-                               skb = skb_set_peeked(skb);
-                               error = PTR_ERR(skb);
-                               if (IS_ERR(skb))
-                                       goto unlock_err;
-
+                               skb->peeked = 1;
                                atomic_inc(&skb->users);
                        } else
                                __skb_unlink(skb, queue);
@@ -250,8 +216,6 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags,
 
        return NULL;
 
-unlock_err:
-       spin_unlock_irqrestore(&queue->lock, cpu_flags);
 no_packet:
        *err = error;
        return NULL;
@@ -701,8 +665,7 @@ __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len)
        if (likely(!sum)) {
                if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))
                        netdev_rx_csum_fault(skb->dev);
-               if (!skb_shared(skb))
-                       skb->ip_summed = CHECKSUM_UNNECESSARY;
+               skb->ip_summed = CHECKSUM_UNNECESSARY;
        }
        return sum;
 }