diff options
Diffstat (limited to 'net/core/dev.c')
-rw-r--r-- | net/core/dev.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index cc9e3652cf93..8cba3d852f25 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -4351,6 +4351,7 @@ static void gro_list_prepare(struct napi_struct *napi, struct sk_buff *skb) | |||
4351 | 4351 | ||
4352 | diffs = (unsigned long)p->dev ^ (unsigned long)skb->dev; | 4352 | diffs = (unsigned long)p->dev ^ (unsigned long)skb->dev; |
4353 | diffs |= p->vlan_tci ^ skb->vlan_tci; | 4353 | diffs |= p->vlan_tci ^ skb->vlan_tci; |
4354 | diffs |= skb_metadata_dst_cmp(p, skb); | ||
4354 | if (maclen == ETH_HLEN) | 4355 | if (maclen == ETH_HLEN) |
4355 | diffs |= compare_ether_header(skb_mac_header(p), | 4356 | diffs |= compare_ether_header(skb_mac_header(p), |
4356 | skb_mac_header(skb)); | 4357 | skb_mac_header(skb)); |
@@ -4548,10 +4549,12 @@ static gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb) | |||
4548 | break; | 4549 | break; |
4549 | 4550 | ||
4550 | case GRO_MERGED_FREE: | 4551 | case GRO_MERGED_FREE: |
4551 | if (NAPI_GRO_CB(skb)->free == NAPI_GRO_FREE_STOLEN_HEAD) | 4552 | if (NAPI_GRO_CB(skb)->free == NAPI_GRO_FREE_STOLEN_HEAD) { |
4553 | skb_dst_drop(skb); | ||
4552 | kmem_cache_free(skbuff_head_cache, skb); | 4554 | kmem_cache_free(skbuff_head_cache, skb); |
4553 | else | 4555 | } else { |
4554 | __kfree_skb(skb); | 4556 | __kfree_skb(skb); |
4557 | } | ||
4555 | break; | 4558 | break; |
4556 | 4559 | ||
4557 | case GRO_HELD: | 4560 | case GRO_HELD: |