Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[pandora-kernel.git] / drivers / net / cxgb3 / cxgb3_offload.c
index 9db9068..32636a1 100644 (file)
@@ -176,16 +176,13 @@ static struct net_device *get_iff_from_mac(struct adapter *adapter,
        int i;
 
        for_each_port(adapter, i) {
-               struct vlan_group *grp;
                struct net_device *dev = adapter->port[i];
-               const struct port_info *p = netdev_priv(dev);
 
                if (!memcmp(dev->dev_addr, mac, ETH_ALEN)) {
                        if (vlan && vlan != VLAN_VID_MASK) {
-                               grp = p->vlan_grp;
-                               dev = NULL;
-                               if (grp)
-                                       dev = vlan_group_get_device(grp, vlan);
+                               rcu_read_lock();
+                               dev = __vlan_find_dev_deep(dev, vlan);
+                               rcu_read_unlock();
                        } else if (netif_is_bond_slave(dev)) {
                                while (dev->master)
                                        dev = dev->master;
@@ -971,7 +968,7 @@ static int nb_callback(struct notifier_block *self, unsigned long event,
        case (NETEVENT_REDIRECT):{
                struct netevent_redirect *nr = ctx;
                cxgb_redirect(nr->old, nr->new);
-               cxgb_neigh_update(nr->new->neighbour);
+               cxgb_neigh_update(dst_get_neighbour(nr->new));
                break;
        }
        default:
@@ -1116,8 +1113,8 @@ static void cxgb_redirect(struct dst_entry *old, struct dst_entry *new)
        struct l2t_entry *e;
        struct t3c_tid_entry *te;
 
-       olddev = old->neighbour->dev;
-       newdev = new->neighbour->dev;
+       olddev = dst_get_neighbour(old)->dev;
+       newdev = dst_get_neighbour(new)->dev;
        if (!is_offloading(olddev))
                return;
        if (!is_offloading(newdev)) {
@@ -1134,7 +1131,7 @@ static void cxgb_redirect(struct dst_entry *old, struct dst_entry *new)
        }
 
        /* Add new L2T entry */
-       e = t3_l2t_get(tdev, new->neighbour, newdev);
+       e = t3_l2t_get(tdev, dst_get_neighbour(new), newdev);
        if (!e) {
                printk(KERN_ERR "%s: couldn't allocate new l2t entry!\n",
                       __func__);