Changeset View
Changeset View
Standalone View
Standalone View
head/sys/fs/unionfs/union_vnops.c
Show First 20 Lines • Show All 1,700 Lines • ▼ Show 20 Lines | unionfs_getwritemount(struct vop_getwritemount_args *ap) | ||||
uvp = UNIONFSVPTOUPPERVP(vp); | uvp = UNIONFSVPTOUPPERVP(vp); | ||||
if (uvp == NULLVP && VREG == vp->v_type) | if (uvp == NULLVP && VREG == vp->v_type) | ||||
uvp = UNIONFSVPTOUPPERVP(VTOUNIONFS(vp)->un_dvp); | uvp = UNIONFSVPTOUPPERVP(VTOUNIONFS(vp)->un_dvp); | ||||
if (uvp != NULLVP) | if (uvp != NULLVP) | ||||
error = VOP_GETWRITEMOUNT(uvp, ap->a_mpp); | error = VOP_GETWRITEMOUNT(uvp, ap->a_mpp); | ||||
else { | else { | ||||
VI_LOCK(vp); | VI_LOCK(vp); | ||||
if (vp->v_iflag & VI_FREE) | if (vp->v_holdcnt == 0) | ||||
error = EOPNOTSUPP; | error = EOPNOTSUPP; | ||||
else | else | ||||
error = EACCES; | error = EACCES; | ||||
VI_UNLOCK(vp); | VI_UNLOCK(vp); | ||||
} | } | ||||
UNIONFS_INTERNAL_DEBUG("unionfs_getwritemount: leave (%d)\n", error); | UNIONFS_INTERNAL_DEBUG("unionfs_getwritemount: leave (%d)\n", error); | ||||
▲ Show 20 Lines • Show All 840 Lines • Show Last 20 Lines |