ipv4: If fib metrics are default, no need to grab ref to FIB info.
authorDavid S. Miller <davem@davemloft.net>
Fri, 28 Jan 2011 22:07:16 +0000 (14:07 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 28 Jan 2011 22:07:16 +0000 (14:07 -0800)
The fib metric memory in this case is static in the kernel image,
so we don't need to reference count it since it's never going
to go away on us.

Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/route.c

index dd57f489673611de363b14d75e4261df064d520d..b1e5d3ac34603b7acc5090fcc370aeb2b48b8b37 100644 (file)
@@ -1861,8 +1861,10 @@ static void rt_init_metrics(struct rtable *rt, struct fib_info *fi)
 {
        if (!(rt->fl.flags & FLOWI_FLAG_PRECOW_METRICS)) {
        no_cow:
-               rt->fi = fi;
-               atomic_inc(&fi->fib_clntref);
+               if (fi->fib_metrics != (u32 *) dst_default_metrics) {
+                       rt->fi = fi;
+                       atomic_inc(&fi->fib_clntref);
+               }
                dst_init_metrics(&rt->dst, fi->fib_metrics, true);
        } else {
                struct inet_peer *peer;