From 645b8b8c4a99f5ac5ad7d8fbef2335130bf84d6f Mon Sep 17 00:00:00 2001 From: Eric Dumazet Date: Mon, 14 Jun 2010 04:46:20 +0000 Subject: [PATCH] --- yaml --- r: 202917 b: refs/heads/master c: c68f24cc354050415c5ea543cd19ea5424463a2f h: refs/heads/master i: 202915: 27f3deeaa9ada25bc763c343156e3bf38226d5f3 v: v3 --- [refs] | 2 +- trunk/net/ipv6/route.c | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index b2374d29ad67..63be6369e4e5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f6bc7d9e4760324258ad5f5d147e79db8442842e +refs/heads/master: c68f24cc354050415c5ea543cd19ea5424463a2f diff --git a/trunk/net/ipv6/route.c b/trunk/net/ipv6/route.c index f7702850d45c..8f2d0400cf8a 100644 --- a/trunk/net/ipv6/route.c +++ b/trunk/net/ipv6/route.c @@ -1084,11 +1084,11 @@ static int ipv6_get_mtu(struct net_device *dev) int mtu = IPV6_MIN_MTU; struct inet6_dev *idev; - idev = in6_dev_get(dev); - if (idev) { + rcu_read_lock(); + idev = __in6_dev_get(dev); + if (idev) mtu = idev->cnf.mtu6; - in6_dev_put(idev); - } + rcu_read_unlock(); return mtu; } @@ -1097,12 +1097,15 @@ int ip6_dst_hoplimit(struct dst_entry *dst) int hoplimit = dst_metric(dst, RTAX_HOPLIMIT); if (hoplimit < 0) { struct net_device *dev = dst->dev; - struct inet6_dev *idev = in6_dev_get(dev); - if (idev) { + struct inet6_dev *idev; + + rcu_read_lock(); + idev = __in6_dev_get(dev); + if (idev) hoplimit = idev->cnf.hop_limit; - in6_dev_put(idev); - } else + else hoplimit = dev_net(dev)->ipv6.devconf_all->hop_limit; + rcu_read_unlock(); } return hoplimit; }