diff options
author | Kukjin Kim <kgene.kim@samsung.com> | 2012-11-20 18:19:10 +0900 |
---|---|---|
committer | Kukjin Kim <kgene.kim@samsung.com> | 2012-11-20 18:19:10 +0900 |
commit | 840ed42942cc1ebbda2ed55f4019673b537fc5de (patch) | |
tree | 415644488e3966837eeb5061d96d4ca7db862318 /net/ipv4/route.c | |
parent | 0dca30003bc752b2fc15906e562ef4e4925725fd (diff) | |
parent | 0a9d5ac307aefbb2c772537d3fe7f75046d563ac (diff) |
Merge branch 'next/hdmi-samsung' into next/devel-samsung
Diffstat (limited to 'net/ipv4/route.c')
-rw-r--r-- | net/ipv4/route.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 432f4bb77238..a8c651216fa6 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -1163,8 +1163,12 @@ static bool rt_bind_exception(struct rtable *rt, struct fib_nh_exception *fnhe, spin_lock_bh(&fnhe_lock); if (daddr == fnhe->fnhe_daddr) { - struct rtable *orig; - + struct rtable *orig = rcu_dereference(fnhe->fnhe_rth); + if (orig && rt_is_expired(orig)) { + fnhe->fnhe_gw = 0; + fnhe->fnhe_pmtu = 0; + fnhe->fnhe_expires = 0; + } if (fnhe->fnhe_pmtu) { unsigned long expires = fnhe->fnhe_expires; unsigned long diff = expires - jiffies; @@ -1181,7 +1185,6 @@ static bool rt_bind_exception(struct rtable *rt, struct fib_nh_exception *fnhe, } else if (!rt->rt_gateway) rt->rt_gateway = daddr; - orig = rcu_dereference(fnhe->fnhe_rth); rcu_assign_pointer(fnhe->fnhe_rth, rt); if (orig) rt_free(orig); |