Taylor R Campbell <campbell+netbsd-tech-k...@mumble.net> wrote: > `Last locked' tells you the return address of the call to rw_enter > that last acquired the lock. (The other addresses may be useful for > other lockdebug panics but aren't likely to be of much use here.)
Here is the code. The function cannot exit without vp->v_interlock being unlocked. What does that means? vdead_check() can go in vwait() -> cv_wait(), and while we were sleeping, another thread exitted the kernel and triggered the debug check? But it seems to be perfomed within a given thread. (gdb) list *0xc018b217 0xc018b217 is in genfs_lock (../../../../miscfs/genfs/genfs_vnops.c:385). 380 return error; 381 } 382 383 fstrans_start(mp, FSTRANS_SHARED); 384 rw_enter(&vp->v_lock, op); 385 mutex_enter(vp->v_interlock); 386 error = vdead_check(vp, VDEAD_NOWAIT); 387 if (error) { 388 rw_exit(&vp->v_lock); 389 fstrans_done(mp); 390 error = vdead_check(vp, 0); 391 KASSERT(error == ENOENT); 392 } 393 mutex_exit(vp->v_interlock); 394 return error; 395 } -- Emmanuel Dreyfus http://hcpnet.free.fr/pubz m...@netbsd.org