Changeset View
Changeset View
Standalone View
Standalone View
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
Show First 20 Lines • Show All 5,910 Lines • ▼ Show 20 Lines | |||||
static int | static int | ||||
zfs_vptocnp(struct vop_vptocnp_args *ap) | zfs_vptocnp(struct vop_vptocnp_args *ap) | ||||
{ | { | ||||
vnode_t *covered_vp; | vnode_t *covered_vp; | ||||
vnode_t *vp = ap->a_vp;; | vnode_t *vp = ap->a_vp;; | ||||
zfsvfs_t *zfsvfs = vp->v_vfsp->vfs_data; | zfsvfs_t *zfsvfs = vp->v_vfsp->vfs_data; | ||||
znode_t *zp = VTOZ(vp); | znode_t *zp = VTOZ(vp); | ||||
enum vgetstate vs; | |||||
int ltype; | int ltype; | ||||
int error; | int error; | ||||
ZFS_ENTER(zfsvfs); | ZFS_ENTER(zfsvfs); | ||||
ZFS_VERIFY_ZP(zp); | ZFS_VERIFY_ZP(zp); | ||||
/* | /* | ||||
* If we are a snapshot mounted under .zfs, run the operation | * If we are a snapshot mounted under .zfs, run the operation | ||||
Show All 16 Lines | if (error == 0) { | ||||
*ap->a_vpp = ZTOV(dzp); | *ap->a_vpp = ZTOV(dzp); | ||||
} | } | ||||
ZFS_EXIT(zfsvfs); | ZFS_EXIT(zfsvfs); | ||||
return (error); | return (error); | ||||
} | } | ||||
ZFS_EXIT(zfsvfs); | ZFS_EXIT(zfsvfs); | ||||
covered_vp = vp->v_mount->mnt_vnodecovered; | covered_vp = vp->v_mount->mnt_vnodecovered; | ||||
vhold(covered_vp); | vs = vget_prep(covered_vp); | ||||
ltype = VOP_ISLOCKED(vp); | ltype = VOP_ISLOCKED(vp); | ||||
VOP_UNLOCK(vp, 0); | VOP_UNLOCK(vp, 0); | ||||
error = vget(covered_vp, LK_SHARED | LK_VNHELD, curthread); | error = vget_finish(covered_vp, LK_SHARED, vs); | ||||
if (error == 0) { | if (error == 0) { | ||||
error = VOP_VPTOCNP(covered_vp, ap->a_vpp, ap->a_cred, | error = VOP_VPTOCNP(covered_vp, ap->a_vpp, ap->a_cred, | ||||
ap->a_buf, ap->a_buflen); | ap->a_buf, ap->a_buflen); | ||||
vput(covered_vp); | vput(covered_vp); | ||||
} | } | ||||
vn_lock(vp, ltype | LK_RETRY); | vn_lock(vp, ltype | LK_RETRY); | ||||
if ((vp->v_iflag & VI_DOOMED) != 0) | if ((vp->v_iflag & VI_DOOMED) != 0) | ||||
error = SET_ERROR(ENOENT); | error = SET_ERROR(ENOENT); | ||||
▲ Show 20 Lines • Show All 105 Lines • Show Last 20 Lines |