Lock the real null vnode lock before substitution of vp->v_vnlock.

This should not really matter for correctness, since vp->v_lock is
not locked before the call, and null_lock() holds the interlock,
but makes the control flow for reclaim more clear.

Tested by:	pho
This commit is contained in:
Konstantin Belousov 2009-05-31 14:52:45 +00:00
parent b1e4b9fcc4
commit cec9ed6d7f

View File

@ -683,14 +683,15 @@ null_reclaim(struct vop_reclaim_args *ap)
* Use the interlock to protect the clearing of v_data to
* prevent faults in null_lock().
*/
lockmgr(&vp->v_lock, LK_EXCLUSIVE, NULL);
VI_LOCK(vp);
vp->v_data = NULL;
vp->v_object = NULL;
vp->v_vnlock = &vp->v_lock;
if (lowervp) {
lockmgr(vp->v_vnlock, LK_EXCLUSIVE | LK_INTERLOCK, VI_MTX(vp));
VI_UNLOCK(vp);
if (lowervp)
vput(lowervp);
} else
else
panic("null_reclaim: reclaiming a node with no lowervp");
free(xp, M_NULLFSNODE);