tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: LOCKDEBUG_BARRIER in mi_userret (was: Re: Another force unmount failure)
Taylor R Campbell <campbell+netbsd-tech-kern%mumble.net@localhost> 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
manu%netbsd.org@localhost
Home |
Main Index |
Thread Index |
Old Index