Changeset View
Changeset View
Standalone View
Standalone View
head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
Show First 20 Lines • Show All 5,928 Lines • ▼ Show 20 Lines | zfs_vptocnp(struct vop_vptocnp_args *ap) | ||||
*/ | */ | ||||
if ((error = sa_lookup(zp->z_sa_hdl, | if ((error = sa_lookup(zp->z_sa_hdl, | ||||
SA_ZPL_PARENT(zfsvfs), &parent, sizeof (parent))) != 0) { | SA_ZPL_PARENT(zfsvfs), &parent, sizeof (parent))) != 0) { | ||||
ZFS_EXIT(zfsvfs); | ZFS_EXIT(zfsvfs); | ||||
return (error); | return (error); | ||||
} | } | ||||
if (zp->z_id != parent || zfsvfs->z_parent == zfsvfs) { | if (zp->z_id != parent || zfsvfs->z_parent == zfsvfs) { | ||||
char name[MAXNAMLEN + 1]; | |||||
znode_t *dzp; | |||||
size_t len; | |||||
error = zfs_znode_parent_and_name(zp, &dzp, name); | |||||
if (error == 0) { | |||||
len = strlen(name); | |||||
*ap->a_buflen -= len; | |||||
bcopy(name, ap->a_buf + *ap->a_buflen, len); | |||||
*ap->a_vpp = ZTOV(dzp); | |||||
} | |||||
ZFS_EXIT(zfsvfs); | ZFS_EXIT(zfsvfs); | ||||
return (vop_stdvptocnp(ap)); | 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); | vhold(covered_vp); | ||||
ltype = VOP_ISLOCKED(vp); | ltype = VOP_ISLOCKED(vp); | ||||
VOP_UNLOCK(vp, 0); | VOP_UNLOCK(vp, 0); | ||||
error = vget(covered_vp, LK_EXCLUSIVE | LK_VNHELD, curthread); | error = vget(covered_vp, LK_EXCLUSIVE | LK_VNHELD, curthread); | ||||
▲ Show 20 Lines • Show All 121 Lines • Show Last 20 Lines |