diff options
author | David S. Miller <davem@davemloft.net> | 2012-03-09 17:34:20 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-03-09 17:34:20 -0500 |
commit | b2d3298e0916fa059712691c85a0e97becc4ab9f (patch) | |
tree | c7d5ea46a9dbf9cebdb122df4aaf0beda6e7621e /net/ipv4/route.c | |
parent | 1a0bdadb4e36abac63b0a9787f372aac30c11a9e (diff) | |
parent | a7f4255f906f60f72e00aad2fb000939449ff32e (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Diffstat (limited to 'net/ipv4/route.c')
-rw-r--r-- | net/ipv4/route.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 0489cedc1671..815989b90dea 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
@@ -132,7 +132,6 @@ static int ip_rt_mtu_expires __read_mostly = 10 * 60 * HZ; | |||
132 | static int ip_rt_min_pmtu __read_mostly = 512 + 20 + 20; | 132 | static int ip_rt_min_pmtu __read_mostly = 512 + 20 + 20; |
133 | static int ip_rt_min_advmss __read_mostly = 256; | 133 | static int ip_rt_min_advmss __read_mostly = 256; |
134 | static int rt_chain_length_max __read_mostly = 20; | 134 | static int rt_chain_length_max __read_mostly = 20; |
135 | static int redirect_genid; | ||
136 | 135 | ||
137 | static struct delayed_work expires_work; | 136 | static struct delayed_work expires_work; |
138 | static unsigned long expires_ljiffies; | 137 | static unsigned long expires_ljiffies; |
@@ -937,7 +936,7 @@ static void rt_cache_invalidate(struct net *net) | |||
937 | 936 | ||
938 | get_random_bytes(&shuffle, sizeof(shuffle)); | 937 | get_random_bytes(&shuffle, sizeof(shuffle)); |
939 | atomic_add(shuffle + 1U, &net->ipv4.rt_genid); | 938 | atomic_add(shuffle + 1U, &net->ipv4.rt_genid); |
940 | redirect_genid++; | 939 | inetpeer_invalidate_tree(AF_INET); |
941 | } | 940 | } |
942 | 941 | ||
943 | /* | 942 | /* |
@@ -1490,10 +1489,8 @@ void ip_rt_redirect(__be32 old_gw, __be32 daddr, __be32 new_gw, | |||
1490 | 1489 | ||
1491 | peer = rt->peer; | 1490 | peer = rt->peer; |
1492 | if (peer) { | 1491 | if (peer) { |
1493 | if (peer->redirect_learned.a4 != new_gw || | 1492 | if (peer->redirect_learned.a4 != new_gw) { |
1494 | peer->redirect_genid != redirect_genid) { | ||
1495 | peer->redirect_learned.a4 = new_gw; | 1493 | peer->redirect_learned.a4 = new_gw; |
1496 | peer->redirect_genid = redirect_genid; | ||
1497 | atomic_inc(&__rt_peer_genid); | 1494 | atomic_inc(&__rt_peer_genid); |
1498 | } | 1495 | } |
1499 | check_peer_redir(&rt->dst, peer); | 1496 | check_peer_redir(&rt->dst, peer); |
@@ -1798,8 +1795,6 @@ static void ipv4_validate_peer(struct rtable *rt) | |||
1798 | if (peer) { | 1795 | if (peer) { |
1799 | check_peer_pmtu(&rt->dst, peer); | 1796 | check_peer_pmtu(&rt->dst, peer); |
1800 | 1797 | ||
1801 | if (peer->redirect_genid != redirect_genid) | ||
1802 | peer->redirect_learned.a4 = 0; | ||
1803 | if (peer->redirect_learned.a4 && | 1798 | if (peer->redirect_learned.a4 && |
1804 | peer->redirect_learned.a4 != rt->rt_gateway) | 1799 | peer->redirect_learned.a4 != rt->rt_gateway) |
1805 | check_peer_redir(&rt->dst, peer); | 1800 | check_peer_redir(&rt->dst, peer); |
@@ -1963,8 +1958,7 @@ static void rt_init_metrics(struct rtable *rt, const struct flowi4 *fl4, | |||
1963 | dst_init_metrics(&rt->dst, peer->metrics, false); | 1958 | dst_init_metrics(&rt->dst, peer->metrics, false); |
1964 | 1959 | ||
1965 | check_peer_pmtu(&rt->dst, peer); | 1960 | check_peer_pmtu(&rt->dst, peer); |
1966 | if (peer->redirect_genid != redirect_genid) | 1961 | |
1967 | peer->redirect_learned.a4 = 0; | ||
1968 | if (peer->redirect_learned.a4 && | 1962 | if (peer->redirect_learned.a4 && |
1969 | peer->redirect_learned.a4 != rt->rt_gateway) { | 1963 | peer->redirect_learned.a4 != rt->rt_gateway) { |
1970 | rt->rt_gateway = peer->redirect_learned.a4; | 1964 | rt->rt_gateway = peer->redirect_learned.a4; |