]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - include/net/dst.h
net: updating dst lastusage is an unlikely event.
[linux.git] / include / net / dst.h
index 06a6765da074449e6f1fe42ee05e711e898ad372..2f53ecc2c296351c68f22a307d4f711e1176f446 100644 (file)
@@ -101,7 +101,7 @@ struct dst_entry {
        union {
                struct dst_entry        *next;
                struct rtable __rcu     *rt_next;
-               struct rt6_info         *rt6_next;
+               struct rt6_info __rcu   *rt6_next;
                struct dn_route __rcu   *dn_next;
        };
 };
@@ -255,17 +255,18 @@ static inline void dst_hold(struct dst_entry *dst)
        WARN_ON(atomic_inc_not_zero(&dst->__refcnt) == 0);
 }
 
-static inline void dst_use(struct dst_entry *dst, unsigned long time)
+static inline void dst_use_noref(struct dst_entry *dst, unsigned long time)
 {
-       dst_hold(dst);
-       dst->__use++;
-       dst->lastuse = time;
+       if (unlikely(time != dst->lastuse)) {
+               dst->__use++;
+               dst->lastuse = time;
+       }
 }
 
-static inline void dst_use_noref(struct dst_entry *dst, unsigned long time)
+static inline void dst_hold_and_use(struct dst_entry *dst, unsigned long time)
 {
-       dst->__use++;
-       dst->lastuse = time;
+       dst_hold(dst);
+       dst_use_noref(dst, time);
 }
 
 static inline struct dst_entry *dst_clone(struct dst_entry *dst)