Changeset View
Changeset View
Standalone View
Standalone View
head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
Show First 20 Lines • Show All 1,930 Lines • ▼ Show 20 Lines | zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *zplprops, dmu_tx_t *tx) | ||||
error = zfs_create_share_dir(zfsvfs, tx); | error = zfs_create_share_dir(zfsvfs, tx); | ||||
ASSERT(error == 0); | ASSERT(error == 0); | ||||
for (i = 0; i != ZFS_OBJ_MTX_SZ; i++) | for (i = 0; i != ZFS_OBJ_MTX_SZ; i++) | ||||
mutex_destroy(&zfsvfs->z_hold_mtx[i]); | mutex_destroy(&zfsvfs->z_hold_mtx[i]); | ||||
kmem_free(zfsvfs, sizeof (zfsvfs_t)); | kmem_free(zfsvfs, sizeof (zfsvfs_t)); | ||||
} | } | ||||
#endif /* _KERNEL */ | #endif /* _KERNEL */ | ||||
static int | static int | ||||
zfs_sa_setup(objset_t *osp, sa_attr_type_t **sa_table) | zfs_sa_setup(objset_t *osp, sa_attr_type_t **sa_table) | ||||
{ | { | ||||
uint64_t sa_obj = 0; | uint64_t sa_obj = 0; | ||||
int error; | int error; | ||||
▲ Show 20 Lines • Show All 239 Lines • ▼ Show 20 Lines | if (error != 0) { | ||||
return (error); | return (error); | ||||
} | } | ||||
error = zfs_obj_to_path_impl(osp, obj, hdl, sa_table, buf, len); | error = zfs_obj_to_path_impl(osp, obj, hdl, sa_table, buf, len); | ||||
zfs_release_sa_handle(hdl, db, FTAG); | zfs_release_sa_handle(hdl, db, FTAG); | ||||
return (error); | return (error); | ||||
} | } | ||||
#ifdef _KERNEL | |||||
int | |||||
zfs_znode_parent_and_name(znode_t *zp, znode_t **dzpp, char *buf) | |||||
{ | |||||
zfsvfs_t *zfsvfs = zp->z_zfsvfs; | |||||
uint64_t parent; | |||||
int is_xattrdir; | |||||
int err; | |||||
/* Extended attributes should not be visible as regular files. */ | |||||
if ((zp->z_pflags & ZFS_XATTR) != 0) | |||||
return (SET_ERROR(EINVAL)); | |||||
err = zfs_obj_to_pobj(zfsvfs->z_os, zp->z_sa_hdl, zfsvfs->z_attr_table, | |||||
&parent, &is_xattrdir); | |||||
if (err != 0) | |||||
return (err); | |||||
ASSERT0(is_xattrdir); | |||||
/* No name as this is a root object. */ | |||||
if (parent == zp->z_id) | |||||
return (SET_ERROR(EINVAL)); | |||||
err = zap_value_search(zfsvfs->z_os, parent, zp->z_id, | |||||
ZFS_DIRENT_OBJ(-1ULL), buf); | |||||
if (err != 0) | |||||
return (err); | |||||
err = zfs_zget(zfsvfs, parent, dzpp); | |||||
return (err); | |||||
} | |||||
#endif /* _KERNEL */ |