On 2019-02-12, Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > On Tue, Feb 12, 2019 at 6:30 AM John Ogness <john.ogness@xxxxxxxxxxxxx> wrote: >> >> + while (atomic_long_read(&rb->lost)) { >> + atomic_long_dec(&rb->lost); >> + rb->seq++; >> + } > > This looks like crazy garbage. It's neither atomic nor sane. It works because because only 1 context on a single CPU can hit that loop. But yes, it is crazy. > Why isn't it something like > > if (atomic_long_read(&rb->lost)) { > long lost = atomic_xchg(&rb->lost, 0); > rb->seq += lost; > } > > instead? Yes, it should be like you suggest. Thanks. John Ogness