Lines Matching refs:zp

341 zfs_external_acl(znode_t *zp)  in zfs_external_acl()  argument
346 if (zp->z_is_sa) in zfs_external_acl()
358 if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_ZNODE_ACL(zp->z_zfsvfs), in zfs_external_acl()
366 VERIFY(zp->z_is_sa && error == ENOENT); in zfs_external_acl()
378 zfs_acl_znode_info(znode_t *zp, int *aclsize, int *aclcount, in zfs_acl_znode_info() argument
381 zfsvfs_t *zfsvfs = zp->z_zfsvfs; in zfs_acl_znode_info()
386 ASSERT(RW_ISWRITER(&zp->z_acl_lock)); in zfs_acl_znode_info()
387 if (zp->z_is_sa) { in zfs_acl_znode_info()
388 if ((error = sa_size(zp->z_sa_hdl, SA_ZPL_DACL_ACES(zfsvfs), in zfs_acl_znode_info()
392 if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_DACL_COUNT(zfsvfs), in zfs_acl_znode_info()
397 if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_ZNODE_ACL(zfsvfs), in zfs_acl_znode_info()
413 zfs_znode_acl_version(znode_t *zp) in zfs_znode_acl_version() argument
417 if (zp->z_is_sa) in zfs_znode_acl_version()
430 if ((error = sa_lookup(zp->z_sa_hdl, in zfs_znode_acl_version()
431 SA_ZPL_ZNODE_ACL(zp->z_zfsvfs), in zfs_znode_acl_version()
439 VERIFY(zp->z_is_sa && error == ENOENT); in zfs_znode_acl_version()
455 zfs_acl_version_zp(znode_t *zp) in zfs_acl_version_zp() argument
457 return (zfs_acl_version(zp->z_zfsvfs->z_version)); in zfs_acl_version_zp()
815 zfs_acl_xform(znode_t *zp, zfs_acl_t *aclp, cred_t *cr) in zfs_acl_xform() argument
850 VERIFY(zfs_copy_ace_2_fuid(zp->z_zfsvfs, ZTOV(zp)->v_type, aclp, in zfs_acl_xform()
1076 zfs_acl_node_read(struct znode *zp, boolean_t have_lock, zfs_acl_t **aclpp, in zfs_acl_node_read() argument
1088 ASSERT(RW_ISWRITER(&zp->z_acl_lock)); in zfs_acl_node_read()
1090 if (zp->z_acl_cached && !will_modify) { in zfs_acl_node_read()
1091 *aclpp = zp->z_acl_cached; in zfs_acl_node_read()
1102 if (!zp->z_is_sa && !have_lock) { in zfs_acl_node_read()
1103 mutex_enter(&zp->z_lock); in zfs_acl_node_read()
1106 version = zfs_znode_acl_version(zp); in zfs_acl_node_read()
1108 if ((error = zfs_acl_znode_info(zp, &aclsize, in zfs_acl_node_read()
1122 if (!zp->z_is_sa) { in zfs_acl_node_read()
1124 error = dmu_read(zp->z_zfsvfs->z_os, in zfs_acl_node_read()
1132 error = sa_lookup(zp->z_sa_hdl, SA_ZPL_DACL_ACES(zp->z_zfsvfs), in zfs_acl_node_read()
1149 zp->z_acl_cached = aclp; in zfs_acl_node_read()
1152 mutex_exit(&zp->z_lock); in zfs_acl_node_read()
1174 zfs_acl_chown_setattr(znode_t *zp) in zfs_acl_chown_setattr() argument
1179 ASSERT(MUTEX_HELD(&zp->z_lock)); in zfs_acl_chown_setattr()
1180 ASSERT(RW_ISWRITER(&zp->z_acl_lock)); in zfs_acl_chown_setattr()
1182 if ((error = zfs_acl_node_read(zp, B_TRUE, &aclp, B_FALSE)) == 0) in zfs_acl_chown_setattr()
1183 zp->z_mode = zfs_mode_compute(zp->z_mode, aclp, in zfs_acl_chown_setattr()
1184 &zp->z_pflags, zp->z_uid, zp->z_gid); in zfs_acl_chown_setattr()
1196 zfs_aclset_common(znode_t *zp, zfs_acl_t *aclp, cred_t *cr, dmu_tx_t *tx) in zfs_aclset_common() argument
1199 zfsvfs_t *zfsvfs = zp->z_zfsvfs; in zfs_aclset_common()
1217 mode = zp->z_mode; in zfs_aclset_common()
1219 mode = zfs_mode_compute(mode, aclp, &zp->z_pflags, in zfs_aclset_common()
1220 zp->z_uid, zp->z_gid); in zfs_aclset_common()
1222 zp->z_mode = mode; in zfs_aclset_common()
1226 &zp->z_pflags, sizeof (zp->z_pflags)); in zfs_aclset_common()
1230 if (zp->z_acl_cached) { in zfs_aclset_common()
1231 zfs_acl_free(zp->z_acl_cached); in zfs_aclset_common()
1232 zp->z_acl_cached = NULL; in zfs_aclset_common()
1243 zfs_acl_xform(zp, aclp, cr); in zfs_aclset_common()
1253 if (zp->z_is_sa) { /* the easy case, just update the ACL attribute */ in zfs_aclset_common()
1264 if ((error = sa_lookup(zp->z_sa_hdl, SA_ZPL_ZNODE_ACL(zfsvfs), in zfs_aclset_common()
1345 zp->z_pflags &= ~ZFS_ACL_WIDE_FLAGS; in zfs_aclset_common()
1347 zp->z_pflags |= aclp->z_hints; in zfs_aclset_common()
1351 zp->z_pflags |= ZFS_ACL_TRIVIAL; in zfs_aclset_common()
1353 zfs_tstamp_update_setup(zp, STATE_CHANGED, NULL, ctime, B_TRUE); in zfs_aclset_common()
1354 return (sa_bulk_update(zp->z_sa_hdl, bulk, count, tx)); in zfs_aclset_common()
1481 zfs_acl_chmod_setattr(znode_t *zp, zfs_acl_t **aclp, uint64_t mode) in zfs_acl_chmod_setattr() argument
1485 rw_enter(&zp->z_acl_lock, RW_WRITER); in zfs_acl_chmod_setattr()
1486 mutex_enter(&zp->z_lock); in zfs_acl_chmod_setattr()
1487 if (zp->z_zfsvfs->z_acl_mode == ZFS_ACL_DISCARD) in zfs_acl_chmod_setattr()
1488 *aclp = zfs_acl_alloc(zfs_acl_version_zp(zp)); in zfs_acl_chmod_setattr()
1490 error = zfs_acl_node_read(zp, B_TRUE, aclp, B_TRUE); in zfs_acl_chmod_setattr()
1493 (*aclp)->z_hints = zp->z_pflags & V4_ACL_WIDE_FLAGS; in zfs_acl_chmod_setattr()
1494 zfs_acl_chmod(ZTOV(zp)->v_type, mode, B_TRUE, in zfs_acl_chmod_setattr()
1495 (zp->z_zfsvfs->z_acl_mode == ZFS_ACL_GROUPMASK), *aclp); in zfs_acl_chmod_setattr()
1497 mutex_exit(&zp->z_lock); in zfs_acl_chmod_setattr()
1498 rw_exit(&zp->z_acl_lock); in zfs_acl_chmod_setattr()
1819 zfs_getacl(znode_t *zp, vsecattr_t *vsecp, boolean_t skipaclchk, cred_t *cr) in zfs_getacl() argument
1833 if (error = zfs_zaccess(zp, ACE_READ_ACL, 0, skipaclchk, cr)) in zfs_getacl()
1840 rw_enter(&zp->z_acl_lock, RW_READER); in zfs_getacl()
1841 aclp = zp->z_acl_cached; in zfs_getacl()
1848 rw_exit(&zp->z_acl_lock); in zfs_getacl()
1849 rw_enter(&zp->z_acl_lock, RW_WRITER); in zfs_getacl()
1851 error = zfs_acl_node_read(zp, B_FALSE, &aclp, B_FALSE); in zfs_getacl()
1853 rw_exit(&zp->z_acl_lock); in zfs_getacl()
1856 rw_downgrade(&zp->z_acl_lock); /* now RW_READER */ in zfs_getacl()
1857 ASSERT(zp->z_acl_cached); in zfs_getacl()
1863 if ((zp->z_pflags & ZFS_ACL_OBJ_ACE) && !(mask & VSA_ACE_ALLTYPES)) { in zfs_getacl()
1902 zfs_copy_fuid_2_ace(zp->z_zfsvfs, aclp, cr, in zfs_getacl()
1920 if (zp->z_pflags & ZFS_ACL_DEFAULTED) in zfs_getacl()
1922 if (zp->z_pflags & ZFS_ACL_PROTECTED) in zfs_getacl()
1924 if (zp->z_pflags & ZFS_ACL_AUTO_INHERIT) in zfs_getacl()
1928 rw_exit(&zp->z_acl_lock); in zfs_getacl()
1992 zfs_setacl(znode_t *zp, vsecattr_t *vsecp, boolean_t skipaclchk, cred_t *cr) in zfs_setacl() argument
1994 zfsvfs_t *zfsvfs = zp->z_zfsvfs; in zfs_setacl()
2007 if (zp->z_pflags & ZFS_IMMUTABLE) in zfs_setacl()
2010 if (error = zfs_zaccess(zp, ACE_WRITE_ACL, 0, skipaclchk, cr)) in zfs_setacl()
2013 error = zfs_vsec_2_aclp(zfsvfs, ZTOV(zp)->v_type, vsecp, cr, &fuidp, in zfs_setacl()
2024 (zp->z_pflags & V4_ACL_WIDE_FLAGS); in zfs_setacl()
2027 rw_enter(&zp->z_acl_lock, RW_WRITER); in zfs_setacl()
2028 mutex_enter(&zp->z_lock); in zfs_setacl()
2032 dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE); in zfs_setacl()
2043 if ((acl_obj = zfs_external_acl(zp)) != 0) { in zfs_setacl()
2045 zfs_znode_acl_version(zp) <= ZFS_ACL_VERSION_INITIAL) { in zfs_setacl()
2053 } else if (!zp->z_is_sa && aclp->z_acl_bytes > ZFS_ACE_SPACE) { in zfs_setacl()
2057 zfs_sa_upgrade_txholds(tx, zp); in zfs_setacl()
2060 rw_exit(&zp->z_acl_lock); in zfs_setacl()
2061 mutex_exit(&zp->z_lock); in zfs_setacl()
2073 error = zfs_aclset_common(zp, aclp, cr, tx); in zfs_setacl()
2075 ASSERT(zp->z_acl_cached == NULL); in zfs_setacl()
2076 zp->z_acl_cached = aclp; in zfs_setacl()
2081 zfs_log_acl(zilog, tx, zp, vsecp, fuidp); in zfs_setacl()
2087 mutex_exit(&zp->z_lock); in zfs_setacl()
2088 rw_exit(&zp->z_acl_lock); in zfs_setacl()
2099 zfs_zaccess_dataset_check(znode_t *zp, uint32_t v4_mode) in zfs_zaccess_dataset_check() argument
2102 (zp->z_zfsvfs->z_vfs->vfs_flag & VFS_RDONLY) && in zfs_zaccess_dataset_check()
2103 (!IS_DEVVP(ZTOV(zp)) || in zfs_zaccess_dataset_check()
2104 (IS_DEVVP(ZTOV(zp)) && (v4_mode & WRITE_MASK_ATTRS)))) { in zfs_zaccess_dataset_check()
2113 (zp->z_pflags & ZFS_IMMUTABLE)) { in zfs_zaccess_dataset_check()
2118 (zp->z_pflags & ZFS_NOUNLINK)) { in zfs_zaccess_dataset_check()
2123 (zp->z_pflags & ZFS_AV_QUARANTINED))) { in zfs_zaccess_dataset_check()
2156 zfs_zaccess_aces_check(znode_t *zp, uint32_t *working_mode, in zfs_zaccess_aces_check() argument
2159 zfsvfs_t *zfsvfs = zp->z_zfsvfs; in zfs_zaccess_aces_check()
2175 rw_enter(&zp->z_acl_lock, RW_READER); in zfs_zaccess_aces_check()
2176 aclp = zp->z_acl_cached; in zfs_zaccess_aces_check()
2183 rw_exit(&zp->z_acl_lock); in zfs_zaccess_aces_check()
2184 rw_enter(&zp->z_acl_lock, RW_WRITER); in zfs_zaccess_aces_check()
2186 error = zfs_acl_node_read(zp, B_FALSE, &aclp, B_FALSE); in zfs_zaccess_aces_check()
2188 rw_exit(&zp->z_acl_lock); in zfs_zaccess_aces_check()
2191 rw_downgrade(&zp->z_acl_lock); /* now RW_READER */ in zfs_zaccess_aces_check()
2192 ASSERT(zp->z_acl_cached); in zfs_zaccess_aces_check()
2203 if (ZTOV(zp)->v_type == VDIR && (iflags & ACE_INHERIT_ONLY_ACE)) in zfs_zaccess_aces_check()
2217 who = zp->z_uid; in zfs_zaccess_aces_check()
2223 who = zp->z_gid; in zfs_zaccess_aces_check()
2237 rw_exit(&zp->z_acl_lock); in zfs_zaccess_aces_check()
2244 znode_t *, zp, in zfs_zaccess_aces_check()
2250 znode_t *, zp, in zfs_zaccess_aces_check()
2254 rw_exit(&zp->z_acl_lock); in zfs_zaccess_aces_check()
2266 rw_exit(&zp->z_acl_lock); in zfs_zaccess_aces_check()
2284 zfs_has_access(znode_t *zp, cred_t *cr) in zfs_has_access() argument
2288 if (zfs_zaccess_aces_check(zp, &have, B_TRUE, cr) != 0) { in zfs_has_access()
2291 owner = zfs_fuid_map_id(zp->z_zfsvfs, zp->z_uid, cr, ZFS_OWNER); in zfs_has_access()
2292 return (secpolicy_vnode_any_access(cr, ZTOV(zp), owner) == 0); in zfs_has_access()
2298 zfs_zaccess_common(znode_t *zp, uint32_t v4_mode, uint32_t *working_mode, in zfs_zaccess_common() argument
2301 zfsvfs_t *zfsvfs = zp->z_zfsvfs; in zfs_zaccess_common()
2315 if ((err = zfs_zaccess_dataset_check(zp, v4_mode)) != 0) { in zfs_zaccess_common()
2343 (ZTOV(zp)->v_type != VDIR) && in zfs_zaccess_common()
2344 (zp->z_pflags & ZFS_READONLY)) { in zfs_zaccess_common()
2348 return (zfs_zaccess_aces_check(zp, working_mode, B_FALSE, cr)); in zfs_zaccess_common()
2352 zfs_zaccess_append(znode_t *zp, uint32_t *working_mode, boolean_t *check_privs, in zfs_zaccess_append() argument
2358 return (zfs_zaccess_common(zp, ACE_APPEND_DATA, working_mode, in zfs_zaccess_append()
2436 zfs_zaccess(znode_t *zp, int mode, int flags, boolean_t skipaclchk, cred_t *cr) in zfs_zaccess() argument
2443 znode_t *check_zp = zp; in zfs_zaccess()
2447 is_attr = ((zp->z_pflags & ZFS_XATTR) && (ZTOV(zp)->v_type == VDIR)); in zfs_zaccess()
2455 if ((error = sa_lookup(zp->z_sa_hdl, in zfs_zaccess()
2456 SA_ZPL_PARENT(zp->z_zfsvfs), &parent, in zfs_zaccess()
2460 if ((error = zfs_zget(zp->z_zfsvfs, in zfs_zaccess()
2482 owner = zfs_fuid_map_id(zp->z_zfsvfs, zp->z_uid, cr, ZFS_OWNER); in zfs_zaccess()
2511 return (secpolicy_vnode_access2(cr, ZTOV(zp), owner, in zfs_zaccess()
2522 error = zfs_zaccess_append(zp, &working_mode, &check_privs, cr); in zfs_zaccess()
2556 zp->z_zfsvfs->z_acl_implicit); in zfs_zaccess()
2575 error = secpolicy_vnode_access2(cr, ZTOV(zp), owner, in zfs_zaccess()
2591 zfs_zaccess_rwx(znode_t *zp, mode_t mode, int flags, cred_t *cr) in zfs_zaccess_rwx() argument
2593 return (zfs_zaccess(zp, zfs_unix_to_v4(mode >> 6), flags, B_FALSE, cr)); in zfs_zaccess_rwx()
2600 zfs_zaccess_unix(znode_t *zp, mode_t mode, cred_t *cr) in zfs_zaccess_unix() argument
2604 return (zfs_zaccess(zp, v4_mode, 0, B_FALSE, cr)); in zfs_zaccess_unix()
2681 zfs_zaccess_delete(znode_t *dzp, znode_t *zp, cred_t *cr) in zfs_zaccess_delete() argument
2690 if (zp->z_pflags & (ZFS_IMMUTABLE | ZFS_NOUNLINK)) in zfs_zaccess_delete()
2707 zp_error = zfs_zaccess_common(zp, ACE_DELETE, &zp_working_mode, in zfs_zaccess_delete()
2806 return (zfs_sticky_remove_access(dzp, zp, cr)); in zfs_zaccess_delete()