Commit 8f2b2282 authored by Eric Dumazet's avatar Eric Dumazet Committed by Jakub Kicinski
Browse files

net: dst: annotate data-races around dst->lastuse



(dst_entry)->lastuse is read and written locklessly,
add corresponding annotations.

Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Reviewed-by: default avatarKuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20250630121934.3399505-4-edumazet@google.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 36229b2c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -240,9 +240,9 @@ static inline void dst_hold(struct dst_entry *dst)

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);
	}
}

+3 −1
Original line number Diff line number Diff line
@@ -1026,9 +1026,11 @@ int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id,
		.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);
	}
+2 −1
Original line number Diff line number Diff line
@@ -2133,7 +2133,8 @@ static void rt6_age_examine_exception(struct rt6_exception_bucket *bucket,
	 * 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;