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
|
* Use the interlock to protect the clearing of v_data to
|
||||||
* prevent faults in null_lock().
|
* prevent faults in null_lock().
|
||||||
*/
|
*/
|
||||||
|
lockmgr(&vp->v_lock, LK_EXCLUSIVE, NULL);
|
||||||
VI_LOCK(vp);
|
VI_LOCK(vp);
|
||||||
vp->v_data = NULL;
|
vp->v_data = NULL;
|
||||||
vp->v_object = NULL;
|
vp->v_object = NULL;
|
||||||
vp->v_vnlock = &vp->v_lock;
|
vp->v_vnlock = &vp->v_lock;
|
||||||
if (lowervp) {
|
VI_UNLOCK(vp);
|
||||||
lockmgr(vp->v_vnlock, LK_EXCLUSIVE | LK_INTERLOCK, VI_MTX(vp));
|
if (lowervp)
|
||||||
vput(lowervp);
|
vput(lowervp);
|
||||||
} else
|
else
|
||||||
panic("null_reclaim: reclaiming a node with no lowervp");
|
panic("null_reclaim: reclaiming a node with no lowervp");
|
||||||
free(xp, M_NULLFSNODE);
|
free(xp, M_NULLFSNODE);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user