Lines 2691-2699
unionfs_vput_pair(struct vop_vput_pair_args *ap)
Link Here
|
2691 |
vp = *vpp; |
2691 |
vp = *vpp; |
2692 |
|
2692 |
|
2693 |
if (vp != NULLVP) { |
2693 |
if (vp != NULLVP) { |
2694 |
unp = VTOUNIONFS(vp); |
2694 |
if (vp->v_type != VSOCK) { |
2695 |
uvp = unp->un_uppervp; |
2695 |
unp = VTOUNIONFS(vp); |
2696 |
lvp = unp->un_lowervp; |
2696 |
uvp = unp->un_uppervp; |
|
|
2697 |
lvp = unp->un_lowervp; |
2698 |
} else { |
2699 |
if (udvp != NULLVP && vp->v_mount == udvp->v_mount) |
2700 |
uvp = vp; |
2701 |
else { |
2702 |
if (ldvp == NULLVP || vp->v_mount != ldvp->v_mount) |
2703 |
panic("%s: ldvp %p does not contain vp %p", |
2704 |
__func__, ldvp, vp); |
2705 |
/*VNASSERT(ldvp != NULLVP && vp->v_mount == ldvp->v_mount, |
2706 |
vp, ("%s: ldvp %p does not contain vp %p", |
2707 |
__func__, ldvp, vp));*/ |
2708 |
lvp = vp; |
2709 |
} |
2710 |
} |
2697 |
if (uvp != NULLVP) |
2711 |
if (uvp != NULLVP) |
2698 |
vref(uvp); |
2712 |
vref(uvp); |
2699 |
if (lvp != NULLVP) |
2713 |
if (lvp != NULLVP) |
Lines 2759-2765
unionfs_vput_pair(struct vop_vput_pair_args *ap)
Link Here
|
2759 |
* underlying vnodes have been unlocked, so vp may have been reclaimed. |
2773 |
* underlying vnodes have been unlocked, so vp may have been reclaimed. |
2760 |
*/ |
2774 |
*/ |
2761 |
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); |
2775 |
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); |
2762 |
if (vp->v_data == NULL && vfs_busy(mp, MBF_NOWAIT) == 0) { |
2776 |
if (vp->v_data == NULL && unp != NULL && vfs_busy(mp, MBF_NOWAIT) == 0) { |
2763 |
vput(vp); |
2777 |
vput(vp); |
2764 |
error = unionfs_nodeget(mp, uvp, lvp, dvp, &tempvp, NULL); |
2778 |
error = unionfs_nodeget(mp, uvp, lvp, dvp, &tempvp, NULL); |
2765 |
if (error == 0) { |
2779 |
if (error == 0) { |