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:
parent
b1e4b9fcc4
commit
cec9ed6d7f
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user