diff mbox

ipv6: don't count addrconf generated routes against gc limit

Message ID 20131206172556.GF26746@order.stressinduktion.org
State Changes Requested, archived
Delegated to: David Miller
Headers show

Commit Message

Hannes Frederic Sowa Dec. 6, 2013, 5:25 p.m. UTC
Brett Ciphery reported that new ipv6 addresses failed to get installed
because the addrconf generated dsts where counted against the dst gc
limit. We don't need to count those routes like we currently don't count
administratively added routes.

Because the max_addresses check enforces a limit on unbounded address
generation first in case someone plays with router advertisments, we
are still safe here.

Reported-by: Brett Ciphery <brett.ciphery@windriver.com>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
---
 net/ipv6/route.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

David Miller Dec. 6, 2013, 9:21 p.m. UTC | #1
From: Hannes Frederic Sowa <hannes@stressinduktion.org>
Date: Fri, 6 Dec 2013 18:25:56 +0100

> @@ -2166,7 +2166,8 @@ struct rt6_info *addrconf_dst_alloc(struct inet6_dev *idev,
>  				    bool anycast)
>  {
>  	struct net *net = dev_net(idev->dev);
> -	struct rt6_info *rt = ip6_dst_alloc(net, net->loopback_dev, 0, NULL);
> +	struct rt6_info *rt = ip6_dst_alloc(net, net->loopback_dev,
> +					    DST_NOCOUNT, NULL);
>  
>  	if (!rt) {
>  		net_warn_ratelimited("Maximum number of routes reached, consider increasing route/max_size\n");

So basically, we only want to count routes that will have RTF_CACHE
set on them.

This warning in the net_warn_ratelimited() is no longer relevant, only
hard memory allocation failures can result in this !rt condition.  So
please respin this patch with that warning removed.

Thanks.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index ddb9d41..11fdf1f 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -2166,7 +2166,8 @@  struct rt6_info *addrconf_dst_alloc(struct inet6_dev *idev,
 				    bool anycast)
 {
 	struct net *net = dev_net(idev->dev);
-	struct rt6_info *rt = ip6_dst_alloc(net, net->loopback_dev, 0, NULL);
+	struct rt6_info *rt = ip6_dst_alloc(net, net->loopback_dev,
+					    DST_NOCOUNT, NULL);
 
 	if (!rt) {
 		net_warn_ratelimited("Maximum number of routes reached, consider increasing route/max_size\n");