--- /usr/src/sys/kern/vfs_default.c Fri Aug 19 19:36:51 2005 +++ src/sys/kern/vfs_default.c Sat Sep 3 01:36:57 2005 @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -259,8 +260,19 @@ } */ *ap; { struct vnode *vp = ap->a_vp; + int flags = ap->a_flags; + int error; - return (lockmgr(vp->v_vnlock, ap->a_flags, VI_MTX(vp), ap->a_td)); + if ((flags & LK_INTERLOCK) == 0) + VI_LOCK(vp); + if ((vp->v_iflag & VI_DOOMED) != 0 && + vp->v_vnlock->lk_lockholder != ap->a_td) { + printf("Thread %p trying to lock doomed vnode\n", ap->a_td); + kdb_backtrace(); + } + error = lockmgr(vp->v_vnlock, ap->a_flags | LK_INTERLOCK, VI_MTX(vp), + ap->a_td); + return (error); } /* See above. */