Re: panic: vm_domainset_iter_first: Unknown policy 15168

From: Mark Johnston <markj_at_freebsd.org>
Date: Tue, 20 Jul 2021 16:15:58 UTC
On Tue, Jul 20, 2021 at 09:07:04AM -0700, Steve Kargl wrote:
> On Mon, Jul 19, 2021 at 07:05:03PM -0700, Steve Kargl wrote:
> > On Mon, Jul 19, 2021 at 07:55:07PM -0400, Mark Johnston wrote:
> > > On Mon, Jul 19, 2021 at 03:02:19PM -0700, Steve Kargl wrote:
> > > > 
> > > > (kgdb) #0  __curthread () at /usr/src/sys/amd64/include/pcpu_aux.h:55
> > > > #1  doadump (textdump=textdump@entry=1)
> > > >     at /usr/src/sys/kern/kern_shutdown.c:399
> > > > #2  0xffffffff805fe263 in kern_reboot (howto=260)
> > > >     at /usr/src/sys/kern/kern_shutdown.c:486
> > > > #3  0xffffffff805fe6b0 in vpanic (fmt=<optimized out>, ap=<optimized out>)
> > > >     at /usr/src/sys/kern/kern_shutdown.c:919
> > > > #4  0xffffffff805fe4b3 in panic (fmt=<unavailable>)
> > > >     at /usr/src/sys/kern/kern_shutdown.c:843
> > > > #5  0xffffffff8085dcbb in vm_domainset_iter_first (di=<optimized out>, 
> > > >     domain=<optimized out>) at /usr/src/sys/vm/vm_domainset.c:189
> > > > #6  0xffffffff8085dbd2 in vm_domainset_iter_page_init (
> > > >     di=di@entry=0xfffffe012ae5e2a0, obj=obj@entry=0xfffff8003c21f420, 
> > > >     pindex=<optimized out>, pindex@entry=16931, 
> > > >     domain=domain@entry=0xfffffe012ae5e2f4, req=<unavailable>, 
> > > >     req@entry=0xfffffe012ae5e2f0) at /usr/src/sys/vm/vm_domainset.c:217
> > > 
> > > Could you please show output from:
> > > 
> > > (kgdb) frame 6
> > > (kgdb) p *dr
> > > (kgdb) p obj->domain
> > > 
> > 
> > The system is at work.  I'll do this tomorrow morning.
> > Thanks for asking for additional info.
> >
> 
> Hi Mark, I poked around and tried to supply the request info
> along with content of other structs. 
> 
> (kgdb) frame 6
> #6  0xffffffff8085dbd2 in vm_domainset_iter_page_init (
>     di=di@entry=0xfffffe012ae5e2a0, obj=obj@entry=0xfffff8003c21f420, 
>     pindex=<optimized out>, pindex@entry=16931, 
>     domain=domain@entry=0xfffffe012ae5e2f4, req=<unavailable>, 
>     req@entry=0xfffffe012ae5e2f0) at /usr/src/sys/vm/vm_domainset.c:217
> 217             vm_domainset_iter_first(di, domain);
> (kgdb) p *dr
> value has been optimized out
> (kgdb) p obj->domain
> $1 = {dr_policy = 0xfffff800064b9c60, dr_iter = 0}
> (kgdb) p *obj->domain->dr_policy 
> $3 = {ds_link = {le_next = 0xfffff8003c21f420, le_prev = 0xfffffe000ce71188}, 
>   ds_mask = {__bits = {0}}, ds_policy = 15168, ds_prefer = 231 '\347', 
>   ds_cnt = 12 '\f', 
>   ds_order = "\000\376\377\377@", <incomplete sequence \347\014>}
> (kgdb) p *di
> $8 = {di_domain = 0xfffff800064b9c60, di_iter = 0xfffff8003c21f490, 
>   di_offset = 35190825029656, di_flags = 86066, di_policy = 15168, 
>   di_n = 255 '\377', di_minskip = true}

So the object somehow ended up referencing a bogus domainset.  Could you
please also show

(kgdb) p *obj
(kgdb) p vnode_domainset

?

Is the problem reproducible?