On Mon, Feb 17, 2020 at 12:01:57PM -0500, Joel Fernandes wrote: > Peter it sounds like you have a failure scenario in mind. Could you describe > more if so? > > I am curious if you were thinking of invented-stores issue here. > > For educational purposes, I was trying to come up with an example where my > compiler does something bad to code without WRITE_ONCE(). So far I only can > reproduce a write-tearing example when write with an immediate value is split > into 2 writes, like Will mentioned: > http://lore.kernel.org/r/20190821103200.kpufwtviqhpbuv2n@willie-the-truck > But that does not seem to apply to this code. > > > - snp->srcu_gp_seq_needed_exp = gpseq; > > > + WRITE_ONCE(snp->srcu_gp_seq_needed_exp, gpseq); Yeah, store tearing. No sane compiler will actually do that, but it is allowed to do random permutations of byte stores just to fuck with us. WRITE_ONCE() disallows that. In that case, the READ_ONCE()s could observe garbage and the compare might accidentally report the wrong thing.