Re: [PATCH net-next] ipvs: annotate the lockless read of sysctl_sync_threshold[0]

From: Linkui Xiao

Date: Thu Oct 29 2026 - 03:14:49 EST


Hi Julian, Simon,

Thanks for the reviews.

On Wed, Oct 28, 2026 at 07:15:34PM +0300, Julian Anastasov wrote:
> Yes, ACCESS_ONCE was used to solve possible division-by-zero problem,
> not to solve the data race. Even if memcpy is converted to 2 int copies
> on some archs (eg. x86) may be it is time to use 2 WRITE_ONCE instead of
> the last memcpy. Can you include this change in v2. Post it when net-next
> opens again by using nf-next tag.

Agreed. v2 replaces the last memcpy() in proc_do_sync_threshold() with
two WRITE_ONCE() stores, one per element. The if/else branches gained
braces to keep checkpatch --strict happy about the now multi-statement
else.

net-next is currently closed and is scheduled to reopen on November 9th
(https://netdev.bots.linux.dev/net-next.html). I will post it as
[PATCH nf-next v2] then.

On Tue, Oct 28, 2026 at 12:49:35PM +0000, Simon Horman wrote:
> I wonder if it would also be appropriate to call
> sysctl_sync_threshold() only once (per-packet) in
> ip_vs_sync_conn_needed(). Stashing the value in a local variable if
> appropriate.

Agreed, and thank you. v2 reads the value once into a local variable,
sync_threshold, before the branch and uses it in either branch.

One precision while re-checking the code: the two call sites are on
mutually exclusive branches of the same if/else, so a single packet
never reads the value twice at runtime. My v1 commit message overstated
this ("the two comparisons ... can observe different values for one and
the same packet"); v2 rewords that paragraph and notes the rewording in
Changes in v2. Stashing a single snapshot is still the cleaner shape, so
the change is worthwhile regardless.

Thanks,
Linkui Xiao