static inline void dst_use_noref(struct dst_entry *dst, unsigned long time)
 {
-       if (unlikely(time != dst->lastuse)) {
+       if (unlikely(time != READ_ONCE(dst->lastuse))) {
                dst->__use++;
-               dst->lastuse = time;
+               WRITE_ONCE(dst->lastuse, time);
        }
 }
 
 
                .rta_error = error,
                .rta_id =  id,
        };
+       unsigned long delta;
 
        if (dst) {
-               ci.rta_lastuse = jiffies_delta_to_clock_t(jiffies - dst->lastuse);
+               delta = jiffies - READ_ONCE(dst->lastuse);
+               ci.rta_lastuse = jiffies_delta_to_clock_t(delta);
                ci.rta_used = dst->__use;
                ci.rta_clntref = rcuref_read(&dst->__rcuref);
        }
 
         * expired, independently from their aging, as per RFC 8201 section 4
         */
        if (!(rt->rt6i_flags & RTF_EXPIRES)) {
-               if (time_after_eq(now, rt->dst.lastuse + gc_args->timeout)) {
+               if (time_after_eq(now, READ_ONCE(rt->dst.lastuse) +
+                                      gc_args->timeout)) {
                        pr_debug("aging clone %p\n", rt);
                        rt6_remove_exception(bucket, rt6_ex);
                        return;