Lines Matching refs:acl

40 	struct posix_acl *acl = ACCESS_ONCE(*p);  in get_cached_acl()  local
41 if (acl) { in get_cached_acl()
43 acl = *p; in get_cached_acl()
44 if (acl != ACL_NOT_CACHED) in get_cached_acl()
45 acl = posix_acl_dup(acl); in get_cached_acl()
48 return acl; in get_cached_acl()
58 void set_cached_acl(struct inode *inode, int type, struct posix_acl *acl) in set_cached_acl() argument
64 rcu_assign_pointer(*p, posix_acl_dup(acl)); in set_cached_acl()
101 struct posix_acl *acl; in get_acl() local
103 acl = get_cached_acl(inode, type); in get_acl()
104 if (acl != ACL_NOT_CACHED) in get_acl()
105 return acl; in get_acl()
130 posix_acl_init(struct posix_acl *acl, int count) in posix_acl_init() argument
132 atomic_set(&acl->a_refcount, 1); in posix_acl_init()
133 acl->a_count = count; in posix_acl_init()
145 struct posix_acl *acl = kmalloc(size, flags); in posix_acl_alloc() local
146 if (acl) in posix_acl_alloc()
147 posix_acl_init(acl, count); in posix_acl_alloc()
148 return acl; in posix_acl_alloc()
156 posix_acl_clone(const struct posix_acl *acl, gfp_t flags) in posix_acl_clone() argument
160 if (acl) { in posix_acl_clone()
161 int size = sizeof(struct posix_acl) + acl->a_count * in posix_acl_clone()
163 clone = kmemdup(acl, size, flags); in posix_acl_clone()
174 posix_acl_valid(const struct posix_acl *acl) in posix_acl_valid() argument
180 FOREACH_ACL_ENTRY(pa, acl, pe) { in posix_acl_valid()
243 posix_acl_equiv_mode(const struct posix_acl *acl, umode_t *mode_p) in posix_acl_equiv_mode() argument
252 if (!acl) in posix_acl_equiv_mode()
255 FOREACH_ACL_ENTRY(pa, acl, pe) { in posix_acl_equiv_mode()
291 struct posix_acl *acl = posix_acl_alloc(3, flags); in posix_acl_from_mode() local
292 if (!acl) in posix_acl_from_mode()
295 acl->a_entries[0].e_tag = ACL_USER_OBJ; in posix_acl_from_mode()
296 acl->a_entries[0].e_perm = (mode & S_IRWXU) >> 6; in posix_acl_from_mode()
298 acl->a_entries[1].e_tag = ACL_GROUP_OBJ; in posix_acl_from_mode()
299 acl->a_entries[1].e_perm = (mode & S_IRWXG) >> 3; in posix_acl_from_mode()
301 acl->a_entries[2].e_tag = ACL_OTHER; in posix_acl_from_mode()
302 acl->a_entries[2].e_perm = (mode & S_IRWXO); in posix_acl_from_mode()
303 return acl; in posix_acl_from_mode()
312 posix_acl_permission(struct inode *inode, const struct posix_acl *acl, int want) in posix_acl_permission() argument
319 FOREACH_ACL_ENTRY(pa, acl, pe) { in posix_acl_permission()
380 static int posix_acl_create_masq(struct posix_acl *acl, umode_t *mode_p) in posix_acl_create_masq() argument
389 FOREACH_ACL_ENTRY(pa, acl, pe) { in posix_acl_create_masq()
437 static int __posix_acl_chmod_masq(struct posix_acl *acl, umode_t mode) in __posix_acl_chmod_masq() argument
444 FOREACH_ACL_ENTRY(pa, acl, pe) { in __posix_acl_chmod_masq()
483 __posix_acl_create(struct posix_acl **acl, gfp_t gfp, umode_t *mode_p) in __posix_acl_create() argument
485 struct posix_acl *clone = posix_acl_clone(*acl, gfp); in __posix_acl_create()
494 posix_acl_release(*acl); in __posix_acl_create()
495 *acl = clone; in __posix_acl_create()
501 __posix_acl_chmod(struct posix_acl **acl, gfp_t gfp, umode_t mode) in __posix_acl_chmod() argument
503 struct posix_acl *clone = posix_acl_clone(*acl, gfp); in __posix_acl_chmod()
512 posix_acl_release(*acl); in __posix_acl_chmod()
513 *acl = clone; in __posix_acl_chmod()
521 struct posix_acl *acl; in posix_acl_chmod() local
529 acl = get_acl(inode, ACL_TYPE_ACCESS); in posix_acl_chmod()
530 if (IS_ERR_OR_NULL(acl)) { in posix_acl_chmod()
531 if (acl == ERR_PTR(-EOPNOTSUPP)) in posix_acl_chmod()
533 return PTR_ERR(acl); in posix_acl_chmod()
536 ret = __posix_acl_chmod(&acl, GFP_KERNEL, mode); in posix_acl_chmod()
539 ret = inode->i_op->set_acl(inode, acl, ACL_TYPE_ACCESS); in posix_acl_chmod()
540 posix_acl_release(acl); in posix_acl_chmod()
547 struct posix_acl **default_acl, struct posix_acl **acl) in posix_acl_create() argument
553 *acl = NULL; in posix_acl_create()
578 *acl = clone; in posix_acl_create()
663 struct posix_acl *acl; in posix_acl_from_xattr() local
679 acl = posix_acl_alloc(count, GFP_NOFS); in posix_acl_from_xattr()
680 if (!acl) in posix_acl_from_xattr()
682 acl_e = acl->a_entries; in posix_acl_from_xattr()
714 return acl; in posix_acl_from_xattr()
717 posix_acl_release(acl); in posix_acl_from_xattr()
726 posix_acl_to_xattr(struct user_namespace *user_ns, const struct posix_acl *acl, in posix_acl_to_xattr() argument
733 real_size = posix_acl_xattr_size(acl->a_count); in posix_acl_to_xattr()
742 for (n=0; n < acl->a_count; n++, ext_entry++) { in posix_acl_to_xattr()
743 const struct posix_acl_entry *acl_e = &acl->a_entries[n]; in posix_acl_to_xattr()
769 struct posix_acl *acl; in posix_acl_xattr_get() local
779 acl = get_acl(d_backing_inode(dentry), handler->flags); in posix_acl_xattr_get()
780 if (IS_ERR(acl)) in posix_acl_xattr_get()
781 return PTR_ERR(acl); in posix_acl_xattr_get()
782 if (acl == NULL) in posix_acl_xattr_get()
785 error = posix_acl_to_xattr(&init_user_ns, acl, value, size); in posix_acl_xattr_get()
786 posix_acl_release(acl); in posix_acl_xattr_get()
797 struct posix_acl *acl = NULL; in posix_acl_xattr_set() local
813 acl = posix_acl_from_xattr(&init_user_ns, value, size); in posix_acl_xattr_set()
814 if (IS_ERR(acl)) in posix_acl_xattr_set()
815 return PTR_ERR(acl); in posix_acl_xattr_set()
817 if (acl) { in posix_acl_xattr_set()
818 ret = posix_acl_valid(acl); in posix_acl_xattr_set()
824 ret = inode->i_op->set_acl(inode, acl, handler->flags); in posix_acl_xattr_set()
826 posix_acl_release(acl); in posix_acl_xattr_set()
865 int simple_set_acl(struct inode *inode, struct posix_acl *acl, int type) in simple_set_acl() argument
870 error = posix_acl_equiv_mode(acl, &inode->i_mode); in simple_set_acl()
874 acl = NULL; in simple_set_acl()
878 set_cached_acl(inode, type, acl); in simple_set_acl()
884 struct posix_acl *default_acl, *acl; in simple_acl_create() local
887 error = posix_acl_create(dir, &inode->i_mode, &default_acl, &acl); in simple_acl_create()
892 set_cached_acl(inode, ACL_TYPE_ACCESS, acl); in simple_acl_create()
896 if (acl) in simple_acl_create()
897 posix_acl_release(acl); in simple_acl_create()