|
@@ -1718,15 +1718,8 @@ EXPORT_SYMBOL_GPL(is_skb_forwardable);
|
|
|
|
|
|
int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
|
|
int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
|
|
{
|
|
{
|
|
- if (skb_shinfo(skb)->tx_flags & SKBTX_DEV_ZEROCOPY) {
|
|
|
|
- if (skb_copy_ubufs(skb, GFP_ATOMIC)) {
|
|
|
|
- atomic_long_inc(&dev->rx_dropped);
|
|
|
|
- kfree_skb(skb);
|
|
|
|
- return NET_RX_DROP;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (unlikely(!is_skb_forwardable(dev, skb))) {
|
|
|
|
|
|
+ if (skb_orphan_frags(skb, GFP_ATOMIC) ||
|
|
|
|
+ unlikely(!is_skb_forwardable(dev, skb))) {
|
|
atomic_long_inc(&dev->rx_dropped);
|
|
atomic_long_inc(&dev->rx_dropped);
|
|
kfree_skb(skb);
|
|
kfree_skb(skb);
|
|
return NET_RX_DROP;
|
|
return NET_RX_DROP;
|