__be32 saddr;
        int err;
 
-       if (!skb_vlan_inet_prepare(skb, skb->protocol != htons(ETH_P_TEB)))
+       if (skb_vlan_inet_prepare(skb, skb->protocol != htons(ETH_P_TEB)))
                return -EINVAL;
 
        if (!sock)
        __be16 sport;
        int err;
 
-       if (!skb_vlan_inet_prepare(skb, skb->protocol != htons(ETH_P_TEB)))
+       if (skb_vlan_inet_prepare(skb, skb->protocol != htons(ETH_P_TEB)))
                return -EINVAL;
 
        if (!sock)
 
        __be16 sport;
        int err;
 
-       if (!skb_vlan_inet_prepare(skb, inner_proto_inherit))
+       if (skb_vlan_inet_prepare(skb, inner_proto_inherit))
                return -EINVAL;
 
        if (!gs4)
        __be16 sport;
        int err;
 
-       if (!skb_vlan_inet_prepare(skb, inner_proto_inherit))
+       if (skb_vlan_inet_prepare(skb, inner_proto_inherit))
                return -EINVAL;
 
        if (!gs6)
 
        __be32 vni = 0;
 
        no_eth_encap = flags & VXLAN_F_GPE && skb->protocol != htons(ETH_P_TEB);
-       if (!skb_vlan_inet_prepare(skb, no_eth_encap))
+       if (skb_vlan_inet_prepare(skb, no_eth_encap))
                goto drop;
 
        old_iph = ip_hdr(skb);
 
 
 /* Variant of pskb_inet_may_pull().
  */
-static inline bool skb_vlan_inet_prepare(struct sk_buff *skb,
-                                        bool inner_proto_inherit)
+static inline enum skb_drop_reason
+skb_vlan_inet_prepare(struct sk_buff *skb, bool inner_proto_inherit)
 {
        int nhlen = 0, maclen = inner_proto_inherit ? 0 : ETH_HLEN;
        __be16 type = skb->protocol;
+       enum skb_drop_reason reason;
 
        /* Essentially this is skb_protocol(skb, true)
         * And we get MAC len.
        /* For ETH_P_IPV6/ETH_P_IP we make sure to pull
         * a base network header in skb->head.
         */
-       if (!pskb_may_pull(skb, maclen + nhlen))
-               return false;
+       reason = pskb_may_pull_reason(skb, maclen + nhlen);
+       if (reason)
+               return reason;
 
        skb_set_network_header(skb, maclen);
-       return true;
+
+       return SKB_NOT_DROPPED_YET;
 }
 
 static inline int ip_encap_hlen(struct ip_tunnel_encap *e)