OSDN Git Service

IB/cm: Remove now useless rcu_lock in dst_fetch_ha
authorJason Gunthorpe <jgg@mellanox.com>
Wed, 27 Jun 2018 07:44:26 +0000 (10:44 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Fri, 29 Jun 2018 17:45:50 +0000 (11:45 -0600)
This lock used to be protecting a call to dst_get_neighbour_noref,
however the below commit changed it to dst_neigh_lookup which no longer
requires rcu.

Access to nud_state, neigh_event_send or rdma_copy_addr does not require
RCU, so delete the lock.

Fixes: 02b619555ad6 ("infiniband: Convert dst_fetch_ha() over to dst_neigh_lookup().")
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
drivers/infiniband/core/addr.c

index 4f32c40..1b817fd 100644 (file)
@@ -315,19 +315,17 @@ static int dst_fetch_ha(const struct dst_entry *dst,
        int ret = 0;
 
        n = dst_neigh_lookup(dst, daddr);
+       if (!n)
+               return -ENODATA;
 
-       rcu_read_lock();
-       if (!n || !(n->nud_state & NUD_VALID)) {
-               if (n)
-                       neigh_event_send(n, NULL);
+       if (!(n->nud_state & NUD_VALID)) {
+               neigh_event_send(n, NULL);
                ret = -ENODATA;
        } else {
                rdma_copy_addr(dev_addr, dst->dev, n->ha);
        }
-       rcu_read_unlock();
 
-       if (n)
-               neigh_release(n);
+       neigh_release(n);
 
        return ret;
 }