diff options
Diffstat (limited to 'fs/ext4/acl.c')
| -rw-r--r-- | fs/ext4/acl.c | 74 | 
1 files changed, 23 insertions, 51 deletions
diff --git a/fs/ext4/acl.c b/fs/ext4/acl.c index 0df88b2a69b..8a2a29d35a6 100644 --- a/fs/ext4/acl.c +++ b/fs/ext4/acl.c @@ -364,12 +364,12 @@ out:   * Extended attribute handlers   */  static size_t -ext4_xattr_list_acl_access(struct inode *inode, char *list, size_t list_len, -			   const char *name, size_t name_len) +ext4_xattr_list_acl_access(struct dentry *dentry, char *list, size_t list_len, +			   const char *name, size_t name_len, int type)  {  	const size_t size = sizeof(POSIX_ACL_XATTR_ACCESS); -	if (!test_opt(inode->i_sb, POSIX_ACL)) +	if (!test_opt(dentry->d_sb, POSIX_ACL))  		return 0;  	if (list && size <= list_len)  		memcpy(list, POSIX_ACL_XATTR_ACCESS, size); @@ -377,12 +377,12 @@ ext4_xattr_list_acl_access(struct inode *inode, char *list, size_t list_len,  }  static size_t -ext4_xattr_list_acl_default(struct inode *inode, char *list, size_t list_len, -			    const char *name, size_t name_len) +ext4_xattr_list_acl_default(struct dentry *dentry, char *list, size_t list_len, +			    const char *name, size_t name_len, int type)  {  	const size_t size = sizeof(POSIX_ACL_XATTR_DEFAULT); -	if (!test_opt(inode->i_sb, POSIX_ACL)) +	if (!test_opt(dentry->d_sb, POSIX_ACL))  		return 0;  	if (list && size <= list_len)  		memcpy(list, POSIX_ACL_XATTR_DEFAULT, size); @@ -390,15 +390,18 @@ ext4_xattr_list_acl_default(struct inode *inode, char *list, size_t list_len,  }  static int -ext4_xattr_get_acl(struct inode *inode, int type, void *buffer, size_t size) +ext4_xattr_get_acl(struct dentry *dentry, const char *name, void *buffer, +		   size_t size, int type)  {  	struct posix_acl *acl;  	int error; -	if (!test_opt(inode->i_sb, POSIX_ACL)) +	if (strcmp(name, "") != 0) +		return -EINVAL; +	if (!test_opt(dentry->d_sb, POSIX_ACL))  		return -EOPNOTSUPP; -	acl = ext4_get_acl(inode, type); +	acl = ext4_get_acl(dentry->d_inode, type);  	if (IS_ERR(acl))  		return PTR_ERR(acl);  	if (acl == NULL) @@ -410,31 +413,16 @@ ext4_xattr_get_acl(struct inode *inode, int type, void *buffer, size_t size)  }  static int -ext4_xattr_get_acl_access(struct inode *inode, const char *name, -			  void *buffer, size_t size) -{ -	if (strcmp(name, "") != 0) -		return -EINVAL; -	return ext4_xattr_get_acl(inode, ACL_TYPE_ACCESS, buffer, size); -} - -static int -ext4_xattr_get_acl_default(struct inode *inode, const char *name, -			   void *buffer, size_t size) -{ -	if (strcmp(name, "") != 0) -		return -EINVAL; -	return ext4_xattr_get_acl(inode, ACL_TYPE_DEFAULT, buffer, size); -} - -static int -ext4_xattr_set_acl(struct inode *inode, int type, const void *value, -		   size_t size) +ext4_xattr_set_acl(struct dentry *dentry, const char *name, const void *value, +		   size_t size, int flags, int type)  { +	struct inode *inode = dentry->d_inode;  	handle_t *handle;  	struct posix_acl *acl;  	int error, retries = 0; +	if (strcmp(name, "") != 0) +		return -EINVAL;  	if (!test_opt(inode->i_sb, POSIX_ACL))  		return -EOPNOTSUPP;  	if (!is_owner_or_cap(inode)) @@ -466,34 +454,18 @@ release_and_out:  	return error;  } -static int -ext4_xattr_set_acl_access(struct inode *inode, const char *name, -			  const void *value, size_t size, int flags) -{ -	if (strcmp(name, "") != 0) -		return -EINVAL; -	return ext4_xattr_set_acl(inode, ACL_TYPE_ACCESS, value, size); -} - -static int -ext4_xattr_set_acl_default(struct inode *inode, const char *name, -			   const void *value, size_t size, int flags) -{ -	if (strcmp(name, "") != 0) -		return -EINVAL; -	return ext4_xattr_set_acl(inode, ACL_TYPE_DEFAULT, value, size); -} -  struct xattr_handler ext4_xattr_acl_access_handler = {  	.prefix	= POSIX_ACL_XATTR_ACCESS, +	.flags	= ACL_TYPE_ACCESS,  	.list	= ext4_xattr_list_acl_access, -	.get	= ext4_xattr_get_acl_access, -	.set	= ext4_xattr_set_acl_access, +	.get	= ext4_xattr_get_acl, +	.set	= ext4_xattr_set_acl,  };  struct xattr_handler ext4_xattr_acl_default_handler = {  	.prefix	= POSIX_ACL_XATTR_DEFAULT, +	.flags	= ACL_TYPE_DEFAULT,  	.list	= ext4_xattr_list_acl_default, -	.get	= ext4_xattr_get_acl_default, -	.set	= ext4_xattr_set_acl_default, +	.get	= ext4_xattr_get_acl, +	.set	= ext4_xattr_set_acl,  };  |