Re: [PATCH 6/6] ipc/sem.c: make semctl(,,{GETNCNT,GETZCNT}) standard compliant

Andrew Morton
2014-05-20T19:01:54Z

On Tue, 20 May 2014 20:30:05 +0200 Manfred Spraul <manfred@colorfullife.com> wrote:

> Hi Andrew,
>
> On 05/20/2014 12:46 AM, Andrew Morton wrote:
> > On Sun, 18 May 2014 09:58:37 +0200 Manfred Spraul <manfred@colorfullife.com> wrote:
> >
> >> SUSv4 clearly defines how semncnt and semzcnt must be calculated:
> >> A task waits on exactly one semaphore:
> >> The semaphore from the first operation in the sop array that cannot proceed.
> >>
> >> The Linux implementation never followed the standard, it tried to count all
> >> semaphores that might be the reason why a task sleeps.
> >>
> >> This patch fixes that.
> > What are the back-compatibility implications of this change?
> A really good question:
> - there is no application in Fedora that uses GETNCNT or GETZCNT.
> - application that use only single-sop semop() are also safe, the
> difference only affects complex apps.
> - portable application are also safe, the new behavior is standard
> compliant.
>
> But that's it. The old behavior existed in Linux from 0.99.something
> until now.

OK, thanks - I slurped your thoughts and Michael's into the changelog
for posterity.

> What about adding a WARN_ON_ONCE() if the case where the behavior
> differs happens?
> Should I write a patch?

That sounds prudent.