diff options
author | Roy.Li <rongqing.li@windriver.com> | 2011-10-03 15:43:35 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-10-17 19:27:56 -0400 |
commit | 01b7806cdce3d3cf1626a1e79389f30512703069 (patch) | |
tree | f4f20f62018d494e63c58f4b7906badbbf25435c /net/ipv6/ndisc.c | |
parent | f861c2b80c45954e1ea04ead24cafcb1806dd536 (diff) |
ipv6: remove a rcu_read_lock in ndisc_constructor
in6_dev_get(dev) takes a reference on struct inet6_dev, we dont need
rcu locking in ndisc_constructor()
Signed-off-by: Roy.Li <rongqing.li@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/ndisc.c')
-rw-r--r-- | net/ipv6/ndisc.c | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 1f52dd257631..7968bfec6138 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c | |||
@@ -370,17 +370,14 @@ static int ndisc_constructor(struct neighbour *neigh) | |||
370 | struct neigh_parms *parms; | 370 | struct neigh_parms *parms; |
371 | int is_multicast = ipv6_addr_is_multicast(addr); | 371 | int is_multicast = ipv6_addr_is_multicast(addr); |
372 | 372 | ||
373 | rcu_read_lock(); | ||
374 | in6_dev = in6_dev_get(dev); | 373 | in6_dev = in6_dev_get(dev); |
375 | if (in6_dev == NULL) { | 374 | if (in6_dev == NULL) { |
376 | rcu_read_unlock(); | ||
377 | return -EINVAL; | 375 | return -EINVAL; |
378 | } | 376 | } |
379 | 377 | ||
380 | parms = in6_dev->nd_parms; | 378 | parms = in6_dev->nd_parms; |
381 | __neigh_parms_put(neigh->parms); | 379 | __neigh_parms_put(neigh->parms); |
382 | neigh->parms = neigh_parms_clone(parms); | 380 | neigh->parms = neigh_parms_clone(parms); |
383 | rcu_read_unlock(); | ||
384 | 381 | ||
385 | neigh->type = is_multicast ? RTN_MULTICAST : RTN_UNICAST; | 382 | neigh->type = is_multicast ? RTN_MULTICAST : RTN_UNICAST; |
386 | if (!dev->header_ops) { | 383 | if (!dev->header_ops) { |