svn commit: r361967 - head/sys/kern

Kyle Evans kevans at freebsd.org
Wed Jun 17 16:39:52 UTC 2020


On Wed, Jun 17, 2020 at 10:21 AM Mateusz Guzik <mjguzik at gmail.com> wrote:
>
> pho@ reported triggering one of the asserts:
> https://people.freebsd.org/~pho/stress/log/mjguzik028.txt
>
> I did not have the time to properly investigate this yet and this does
> not reproduce for me.
>

Ah, this is good to know that he's reproduced it. There's only so many
places that we touch these. I can't quite envision how, but the only
scenario this would seem to be possible in is doenterpgrp() ->
fixjobc(p, p->p_grp, 0) -> adjusts some child with a different process
group without actually changing it, orphans the group, then we manage
to finalize killjobc() on a freshly-orphaned process, which hasn't had
its p_pgrp nullified.

I haven't yet traced it through completely enough to determine if
there's any way that can even happen.

> That said, I may either revert the assert (or degrade to a warning) or
> add some commentary if I don't sort this out this week.
>
> On 6/17/20, Kyle Evans <kevans at freebsd.org> wrote:
> > On Tue, Jun 9, 2020 at 10:17 AM Mateusz Guzik <mjg at freebsd.org> wrote:
> >>
> >> Author: mjg
> >> Date: Tue Jun  9 15:17:23 2020
> >> New Revision: 361967
> >> URL: https://svnweb.freebsd.org/changeset/base/361967
> >>
> >> Log:
> >>   Assert on pg_jobc state.
> >>
> >>   Stolen from NetBSD.
> >>
> >> Modified:
> >>   head/sys/kern/kern_proc.c
> >>
> >> Modified: head/sys/kern/kern_proc.c
> >> ==============================================================================
> >> --- head/sys/kern/kern_proc.c   Tue Jun  9 14:20:16 2020        (r361966)
> >> +++ head/sys/kern/kern_proc.c   Tue Jun  9 15:17:23 2020        (r361967)
> >> @@ -751,9 +751,11 @@ pgadjustjobc(struct pgrp *pgrp, int entering)
> >>  {
> >>
> >>         PGRP_LOCK(pgrp);
> >> -       if (entering)
> >> +       if (entering) {
> >> +               MPASS(pgrp->pg_jobc >= 0);
> >>                 pgrp->pg_jobc++;
> >> -       else {
> >> +       } else {
> >> +               MPASS(pgrp->pg_jobc > 0);
> >>                 --pgrp->pg_jobc;
> >>                 if (pgrp->pg_jobc == 0)
> >>                         orphanpg(pgrp);
> >
> > We seem to be doing something wrong here, but I'm still working on
> > reproducing it on a machine that actually has usable swap configured
> > to get a dump. I've hit one of these asserts just from hitting the
> > power button to shutoff from within xfce (hitting the latter branch
> > with pgrp->pg_jobc == 0 IIRC) and another laptop panicked sometime
> > overnight -- I wasn't able to catch the second one at all, because
> > it's hooked up to a switch that loses its mind once that laptop
> > panicks and it had to be rebooted before I could attend to it to
> > revive network for the other machines on the switch.
> >
> > Thanks,
> >
> > Kyle Evans
> >
>
>
> --
> Mateusz Guzik <mjguzik gmail.com>


More information about the svn-src-head mailing list