Index: sys/kern/vfs_vnops.c =================================================================== --- sys/kern/vfs_vnops.c +++ sys/kern/vfs_vnops.c @@ -1579,7 +1579,7 @@ ("vn_lock: error %d incompatible with flags %#x", error, flags)); if ((flags & LK_RETRY) == 0) { - if (error == 0 && (vp->v_iflag & VI_DOOMED) != 0) { + if (error == 0 && VNODE_IS_DOOMED(vp)) { VOP_UNLOCK(vp, 0); error = ENOENT; } Index: sys/sys/vnode.h =================================================================== --- sys/sys/vnode.h +++ sys/sys/vnode.h @@ -889,6 +889,17 @@ #define VOP_UNSET_TEXT_CHECKED(vp) VOP_UNSET_TEXT((vp)) #endif +#define VNODE_IS_DOOMED(vp) ({ \ + struct vnode *_vp = (vp); \ + bool _doomed = _vp->v_type == VBAD; \ + \ + ASSERT_VOP_LOCKED(_vp, __func__); \ + if (_doomed) \ + VNASSERT(_vp->v_iflag & VI_DOOMED, _vp, \ + ("%s: type is VBAD but vnode is not doomed", __func__));\ + _doomed; \ +}) + void vput(struct vnode *vp); void vrele(struct vnode *vp); void vref(struct vnode *vp);