Re: [net] Question about ipvs->sysctl_sync_threshold and READ_ONCE

Julian Anastasov <[email protected]>
Newsgroups org.kernel.vger.lvs-devel,org.kernel.vger.netdev
Message-ID <[email protected]>
	Hello,

On Tue, 19 Mar 2024, Zijie Zhao wrote:

> Dear IPVS maintainers,
> 
> We encountered an unusual usage of sysctl parameter while analyzing kernel
> source code.
> 
> 
> In include/net/ip_vs.h, line 1062 - 1070:
> 
> ```
> static inline int sysctl_sync_threshold(struct netns_ipvs *ipvs)
> {
> 	return ipvs->sysctl_sync_threshold[0];
> }
> 
> static inline int sysctl_sync_period(struct netns_ipvs *ipvs)
> {
> 	return READ_ONCE(ipvs->sysctl_sync_threshold[1]);
> }
> ```
> 
> Here, sysctl_sync_threshold[1] is accessed behind `READ_ONCE`, but
> sysctl_sync_threshold[0] is not. Should sysctl_sync_threshold[0] also be
> guarded by `READ_ONCE`?
> 
> Please kindly let us know if we missed any key information and this is
> actually intended. We appreciate your information and time! Thanks!

	Difference comes from commit 749c42b620a9 where we protect us
from division by zero by using ACCESS_ONCE at that time. The idea was
to read the value only once. Nowadays, READ_ONCE also has the role to
avoid load tearing, so, yes, all sysctl vars should be accessed with
READ_ONCE but this is a low priority goal for now.

> Links to the code:
> https://elixir.bootlin.com/linux/v6.8.1/source/include/net/ip_vs.h#L1064
> https://elixir.bootlin.com/linux/v6.8.1/source/include/net/ip_vs.h#L1069
> 
> Best,
> Zijie

Regards

--
Julian Anastasov <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.