diff options
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/dev.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 70ecb86439ca..8b6118a16b87 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -3231,6 +3231,17 @@ another_round: | |||
3231 | ncls: | 3231 | ncls: |
3232 | #endif | 3232 | #endif |
3233 | 3233 | ||
3234 | if (vlan_tx_tag_present(skb)) { | ||
3235 | if (pt_prev) { | ||
3236 | ret = deliver_skb(skb, pt_prev, orig_dev); | ||
3237 | pt_prev = NULL; | ||
3238 | } | ||
3239 | if (vlan_do_receive(&skb)) | ||
3240 | goto another_round; | ||
3241 | else if (unlikely(!skb)) | ||
3242 | goto out; | ||
3243 | } | ||
3244 | |||
3234 | rx_handler = rcu_dereference(skb->dev->rx_handler); | 3245 | rx_handler = rcu_dereference(skb->dev->rx_handler); |
3235 | if (rx_handler) { | 3246 | if (rx_handler) { |
3236 | if (pt_prev) { | 3247 | if (pt_prev) { |
@@ -3251,17 +3262,6 @@ ncls: | |||
3251 | } | 3262 | } |
3252 | } | 3263 | } |
3253 | 3264 | ||
3254 | if (vlan_tx_tag_present(skb)) { | ||
3255 | if (pt_prev) { | ||
3256 | ret = deliver_skb(skb, pt_prev, orig_dev); | ||
3257 | pt_prev = NULL; | ||
3258 | } | ||
3259 | if (vlan_do_receive(&skb)) | ||
3260 | goto another_round; | ||
3261 | else if (unlikely(!skb)) | ||
3262 | goto out; | ||
3263 | } | ||
3264 | |||
3265 | /* deliver only exact match when indicated */ | 3265 | /* deliver only exact match when indicated */ |
3266 | null_or_dev = deliver_exact ? skb->dev : NULL; | 3266 | null_or_dev = deliver_exact ? skb->dev : NULL; |
3267 | 3267 | ||