On Mon, Aug 17, 2020 at 18:02:04 +0200, Andrea Bolognani wrote:
On Mon, 2020-08-17 at 17:28 +0200, Peter Krempa wrote:
> On Mon, Aug 17, 2020 at 16:26:55 +0200, Michal Privoznik wrote:
> > - if ((controlFD = virDMOpen()) < 0)
> > + if ((controlFD = virDMOpen()) < 0) {
> > + if (controlFD == -2) {
> > + /* Devmapper was available but now it isn't. Somebody
> > + * must have removed the module. Reset the major
> > + * number we remember. */
> > + virDMMajor = 0;
>
> This overwrites 'virDMMajor' without taking the mutex. 'unsigned
int' on
> x86_64 will be atomic, we shouldn't use a knowingly broken code pattern
> without at least a proper explanation why it's okay.
IIUC you're saying that you'd be okay with adding a comment that
explains why this will work fine on x86_64. If so, I'd like to point
out that libvirt supports many other architectures... Is the same
pattern safe on those as well?
It would really depend on how the arguments in the explanation persuade
me that the non-obvious/weird/wrong-looking code is justified in that
particular scenario. If the justification doesn't include that it's safe
in every scenario I'd protest it anyways.
What I wanted to say is that I know that this works on x86 but it goes
against established patterns of lock usage. That was to prevent any
discussion in the direction "but it's safe to do in this case" from
happening without moving towards a better code pattern or explanation
why it's necessary in this case.