|
@@ -2483,6 +2483,7 @@ int netif_receive_skb(struct sk_buff *skb)
|
|
|
{
|
|
|
struct packet_type *ptype, *pt_prev;
|
|
|
struct net_device *orig_dev;
|
|
|
+ struct net_device *master;
|
|
|
struct net_device *null_or_orig;
|
|
|
struct net_device *null_or_bond;
|
|
|
int ret = NET_RX_DROP;
|
|
@@ -2503,11 +2504,12 @@ int netif_receive_skb(struct sk_buff *skb)
|
|
|
|
|
|
null_or_orig = NULL;
|
|
|
orig_dev = skb->dev;
|
|
|
- if (orig_dev->master) {
|
|
|
- if (skb_bond_should_drop(skb))
|
|
|
+ master = ACCESS_ONCE(orig_dev->master);
|
|
|
+ if (master) {
|
|
|
+ if (skb_bond_should_drop(skb, master))
|
|
|
null_or_orig = orig_dev; /* deliver only exact match */
|
|
|
else
|
|
|
- skb->dev = orig_dev->master;
|
|
|
+ skb->dev = master;
|
|
|
}
|
|
|
|
|
|
__get_cpu_var(netdev_rx_stat).total++;
|