Manuel Bouyer <[email protected]> wrote: > > > > > > The mutex_enter() in the pool_cache_get_slow()? > > > > This cache won't sleep if PR_NOWAIT, it's interrupt safe. > > > > <...> > > I've been running with the attached patch for a day now (the workaround > for bp changing under us was already there for a couple days), and the > "dkstart: preemption occured" printf fired twice. I didn't do the > kpreempt_disable()/kpreempt_enable() because the code is running > with the kernel_lock and at splbio(), so kernel preemption should already > be disabled (if it's not it's a problem). <...>
This is concerning. As mentioned, bufio_cache is interrupt safe (marked with IPL_BIO) and locks at pool_cache(9) layer, also deeper layers e.g. UVM kva-cache, should use spin-locks at IPL_VM. There is one possibly related mysterious backtrace - PR/42611. It looks like mutex locked against oneself (via interrupt) on interrupt safe pool, which suggests non-IPL_VM mutex use. Quick code inspection did not reveal anything suspicious, but there are many cache layers involved, and I did not find enough time for a deep look yet. -- Mindaugas
