]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
ipv4: Remove unnecessary code from rt_check_expire().
authorDavid S. Miller <davem@davemloft.net>
Tue, 26 Jun 2012 07:10:09 +0000 (00:10 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 26 Jun 2012 07:10:09 +0000 (00:10 -0700)
IPv4 routing cache entries no longer use dst->expires, because the
metrics, PMTU, and redirect information are stored in the inetpeer
cache.

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

index 8d62d85e68dc1ffa883a9189a068e4de57506552..846961c6cbe196d03c57c5964596826e6741a98f 100644 (file)
@@ -870,34 +870,22 @@ static void rt_check_expire(void)
                while ((rth = rcu_dereference_protected(*rthp,
                                        lockdep_is_held(rt_hash_lock_addr(i)))) != NULL) {
                        prefetch(rth->dst.rt_next);
-                       if (rt_is_expired(rth)) {
+                       if (rt_is_expired(rth) ||
+                           rt_may_expire(rth, tmo, ip_rt_gc_timeout)) {
                                *rthp = rth->dst.rt_next;
                                rt_free(rth);
                                continue;
                        }
-                       if (rth->dst.expires) {
-                               /* Entry is expired even if it is in use */
-                               if (time_before_eq(jiffies, rth->dst.expires)) {
-nofree:
-                                       tmo >>= 1;
-                                       rthp = &rth->dst.rt_next;
-                                       /*
-                                        * We only count entries on
-                                        * a chain with equal hash inputs once
-                                        * so that entries for different QOS
-                                        * levels, and other non-hash input
-                                        * attributes don't unfairly skew
-                                        * the length computation
-                                        */
-                                       length += has_noalias(rt_hash_table[i].chain, rth);
-                                       continue;
-                               }
-                       } else if (!rt_may_expire(rth, tmo, ip_rt_gc_timeout))
-                               goto nofree;
 
-                       /* Cleanup aged off entries. */
-                       *rthp = rth->dst.rt_next;
-                       rt_free(rth);
+                       /* We only count entries on a chain with equal
+                        * hash inputs once so that entries for
+                        * different QOS levels, and other non-hash
+                        * input attributes don't unfairly skew the
+                        * length computation
+                        */
+                       tmo >>= 1;
+                       rthp = &rth->dst.rt_next;
+                       length += has_noalias(rt_hash_table[i].chain, rth);
                }
                spin_unlock_bh(rt_hash_lock_addr(i));
                sum += length;