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

Andrew Morton
2014-05-14T22:30:44Z

On Wed, 14 May 2014 07:52:38 -0700 Davidlohr Bueso <davidlohr@hp.com> wrote:

> > --- a/ipc/sem.c
> > +++ b/ipc/sem.c
> > @@ -993,38 +993,33 @@ static void do_smart_update(struct sem_array *sma, struct sembuf *sops, int nsop
> > }
> >
> > /*
> > - * check_qop: Test how often a queued operation sleeps on the semaphore semnum
> > + * check_qop: Test if a queued operation sleeps on the semaphore semnum
> > */
> > static int check_qop(struct sem_array *sma, int semnum, struct sem_queue *q,
> > bool count_zero)
> > {
> > - struct sembuf *sops = q->sops;
> > - int nsops = q->nsops;
> > - int i, semcnt;
> > + struct sembuf *sop = q->blocking;
> >
> > - semcnt = 0;
> > + BUG_ON(sop->sem_flg & IPC_NOWAIT);
> > + BUG_ON(sop->sem_op > 0);
>
> Hmm in light of Linus' recent criticism about randomly sprinkling
> BUG_ONs in the kernel I'm not sure we want this. Yes, all those calls
> are correct from a logical pov and should never occur, however, would
> WARN be more suitable instead? I don't know.

Well, this BUG_ON is so old that a decent approach would be to just
delete the thing, if only Manfred wasn't changing stuff.

Yes, if we can reasonably warn-then-recover then I guess that's worth
doing.