]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/infiniband/core/addr.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / drivers / infiniband / core / addr.c
index a5ea1bce9689601edb299eab667ea0be35290cd2..8aba0ba57de50ff6fdc2dd3bdce24f0266f67cc6 100644 (file)
@@ -130,8 +130,8 @@ int rdma_translate_ip(struct sockaddr *addr, struct rdma_dev_addr *dev_addr)
 
 #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
        case AF_INET6:
-               read_lock(&dev_base_lock);
-               for_each_netdev(&init_net, dev) {
+               rcu_read_lock();
+               for_each_netdev_rcu(&init_net, dev) {
                        if (ipv6_chk_addr(&init_net,
                                          &((struct sockaddr_in6 *) addr)->sin6_addr,
                                          dev, 1)) {
@@ -139,7 +139,7 @@ int rdma_translate_ip(struct sockaddr *addr, struct rdma_dev_addr *dev_addr)
                                break;
                        }
                }
-               read_unlock(&dev_base_lock);
+               rcu_read_unlock();
                break;
 #endif
        }
@@ -200,7 +200,7 @@ static int addr4_resolve(struct sockaddr_in *src_in,
        src_in->sin_family = AF_INET;
        src_in->sin_addr.s_addr = rt->rt_src;
 
-       if (rt->idev->dev->flags & IFF_LOOPBACK) {
+       if (rt->dst.dev->flags & IFF_LOOPBACK) {
                ret = rdma_translate_ip((struct sockaddr *) dst_in, addr);
                if (!ret)
                        memcpy(addr->dst_dev_addr, addr->src_dev_addr, MAX_ADDR_LEN);
@@ -208,12 +208,12 @@ static int addr4_resolve(struct sockaddr_in *src_in,
        }
 
        /* If the device does ARP internally, return 'done' */
-       if (rt->idev->dev->flags & IFF_NOARP) {
-               rdma_copy_addr(addr, rt->idev->dev, NULL);
+       if (rt->dst.dev->flags & IFF_NOARP) {
+               rdma_copy_addr(addr, rt->dst.dev, NULL);
                goto put;
        }
 
-       neigh = neigh_lookup(&arp_tbl, &rt->rt_gateway, rt->idev->dev);
+       neigh = neigh_lookup(&arp_tbl, &rt->rt_gateway, rt->dst.dev);
        if (!neigh || !(neigh->nud_state & NUD_VALID)) {
                neigh_event_send(rt->dst.neighbour, NULL);
                ret = -ENODATA;