| From foo@baz Thu Feb 27 20:11:26 PST 2014 |
| From: Duan Jiong <duanj.fnst@cn.fujitsu.com> |
| Date: Mon, 17 Feb 2014 15:23:43 +0800 |
| Subject: ipv4: fix counter in_slow_tot |
| |
| From: Duan Jiong <duanj.fnst@cn.fujitsu.com> |
| |
| [ Upstream commit a6254864c08109c66a194612585afc0439005286 ] |
| |
| since commit 89aef8921bf("ipv4: Delete routing cache."), the counter |
| in_slow_tot can't work correctly. |
| |
| The counter in_slow_tot increase by one when fib_lookup() return successfully |
| in ip_route_input_slow(), but actually the dst struct maybe not be created and |
| cached, so we can increase in_slow_tot after the dst struct is created. |
| |
| Signed-off-by: Duan Jiong <duanj.fnst@cn.fujitsu.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/ipv4/route.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/net/ipv4/route.c |
| +++ b/net/ipv4/route.c |
| @@ -1600,6 +1600,7 @@ static int __mkroute_input(struct sk_buf |
| rth->rt_gateway = 0; |
| rth->rt_uses_gateway = 0; |
| INIT_LIST_HEAD(&rth->rt_uncached); |
| + RT_CACHE_STAT_INC(in_slow_tot); |
| |
| rth->dst.input = ip_forward; |
| rth->dst.output = ip_output; |
| @@ -1701,8 +1702,6 @@ static int ip_route_input_slow(struct sk |
| if (err != 0) |
| goto no_route; |
| |
| - RT_CACHE_STAT_INC(in_slow_tot); |
| - |
| if (res.type == RTN_BROADCAST) |
| goto brd_input; |
| |
| @@ -1771,6 +1770,7 @@ local_input: |
| rth->rt_gateway = 0; |
| rth->rt_uses_gateway = 0; |
| INIT_LIST_HEAD(&rth->rt_uncached); |
| + RT_CACHE_STAT_INC(in_slow_tot); |
| if (res.type == RTN_UNREACHABLE) { |
| rth->dst.input= ip_error; |
| rth->dst.error= -err; |