On 22/11/22(Tue) 23:40, Mark Kettenis wrote:
> > Date: Tue, 22 Nov 2022 17:47:44 +0000
> > From: Miod Vallat <m...@online.fr>
> > 
> > > Here is a diff.  Maybe bluhm@ can try this on the macppc machine that
> > > triggered the original "vref used where vget required" problem?
> > 
> > On a similar machine it panics after a few hours with:
> > 
> > panic: uvn_flush: PGO_SYNCIO return 'try again' error (impossible)
> > 
> > The trace (transcribed by hand) is
> > uvn_flush+0x820
> > uvm_vnp_terminate+0x79
> > vclean+0xdc
> > vgonel+0x70
> > getnewvnode+0x240
> > ffs_vget+0xcc
> > ffs_inode_alloc+0x13c
> > ufs_makeinode+0x94
> > ufs_create+0x58
> > VOP_CREATE+0x48
> > vn_open+0x188
> > doopenat+0x1b4
> 
> Ah right, there is another path where we end up with a refcount of
> zero.  Should be fixable, but I need to think about this for a bit.

Not sure to understand what you mean with refcount of 0.  Could you
elaborate?

My understanding of the panic reported is that the proposed diff creates
a complicated relationship between the vnode and the UVM vnode layer.
The above problem occurs because VXLOCK is set on a vnode when it is
being recycled *before* calling uvm_vnp_terminate().   Now that uvn_io()
calls vget(9) it will fail because VXLOCK is set, which is what we want
during vclean(9).

Reply via email to