initramfs: fix initramfs size calculation
[linux-drm-fsl-dcu.git] / net / ipv4 / ip_sockglue.c
index 1e64dabbd232ea41bdbf6825b9358dc18b741931..ce231780a2b14ef4e15a33baad4b0c887e96df16 100644 (file)
@@ -287,12 +287,8 @@ int ip_ra_control(struct sock *sk, unsigned char on,
 void ip_icmp_error(struct sock *sk, struct sk_buff *skb, int err,
                   __be16 port, u32 info, u8 *payload)
 {
-       struct inet_sock *inet = inet_sk(sk);
        struct sock_exterr_skb *serr;
 
-       if (!inet->recverr)
-               return;
-
        skb = skb_clone(skb, GFP_ATOMIC);
        if (!skb)
                return;
@@ -958,6 +954,22 @@ e_inval:
        return -EINVAL;
 }
 
+/**
+ * ip_queue_rcv_skb - Queue an skb into sock receive queue
+ * @sk: socket
+ * @skb: buffer
+ *
+ * Queues an skb into socket receive queue. If IP_CMSG_PKTINFO option
+ * is not set, we drop skb dst entry now, while dst cache line is hot.
+ */
+int ip_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
+{
+       if (!(inet_sk(sk)->cmsg_flags & IP_CMSG_PKTINFO))
+               skb_dst_drop(skb);
+       return sock_queue_rcv_skb(sk, skb);
+}
+EXPORT_SYMBOL(ip_queue_rcv_skb);
+
 int ip_setsockopt(struct sock *sk, int level,
                int optname, char __user *optval, unsigned int optlen)
 {