Subject: VXLOCK race?
To: None <tech-kern@NetBSD.ORG>
From: Robert Black <>
List: tech-kern
Date: 05/09/1996 17:28:11

I have been browsing through kern/vfs_subr.c trying to figure out what various
things do. One thing which is worrying me is the following:

At the start of vgone()...

        if (vp->v_flag & VXLOCK) {
                vp->v_flag |= VXWANT;
                tsleep((caddr_t)vp, PINOD, "vgone", 0);
         * Clean out the filesystem specific data.
        vclean(vp, DOCLOSE);

and in vclean()...

         * Prevent the vnode from being recycled or
         * brought into use while we clean it out.
        if (vp->v_flag & VXLOCK)
                panic("vclean: deadlock");
        vp->v_flag |= VXLOCK;
         * Clean out any buffers associated with the vnode.

as far as I can see this is all at spl0 - I'm probably missing something
important but this looks horribly like a potential race condition to me. Could
someone please explain to me why it isn't, or if it is, why it isn't important.
As far as I can see this could lead to junk being written via dangling


Rob Black