diff options
Diffstat (limited to 'fs/btrfs/xattr.c')
| -rw-r--r-- | fs/btrfs/xattr.c | 17 | 
1 files changed, 14 insertions, 3 deletions
diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c index 05740b9789e..ad8328d797e 100644 --- a/fs/btrfs/xattr.c +++ b/fs/btrfs/xattr.c @@ -22,11 +22,13 @@  #include <linux/rwsem.h>  #include <linux/xattr.h>  #include <linux/security.h> +#include <linux/posix_acl_xattr.h>  #include "ctree.h"  #include "btrfs_inode.h"  #include "transaction.h"  #include "xattr.h"  #include "disk-io.h" +#include "props.h"  ssize_t __btrfs_getxattr(struct inode *inode, const char *name, @@ -313,8 +315,8 @@ err:   */  const struct xattr_handler *btrfs_xattr_handlers[] = {  #ifdef CONFIG_BTRFS_FS_POSIX_ACL -	&btrfs_xattr_acl_access_handler, -	&btrfs_xattr_acl_default_handler, +	&posix_acl_access_xattr_handler, +	&posix_acl_default_xattr_handler,  #endif  	NULL,  }; @@ -331,7 +333,8 @@ static bool btrfs_is_valid_xattr(const char *name)  			XATTR_SECURITY_PREFIX_LEN) ||  	       !strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN) ||  	       !strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) || -	       !strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN); +	       !strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN) || +		!strncmp(name, XATTR_BTRFS_PREFIX, XATTR_BTRFS_PREFIX_LEN);  }  ssize_t btrfs_getxattr(struct dentry *dentry, const char *name, @@ -373,6 +376,10 @@ int btrfs_setxattr(struct dentry *dentry, const char *name, const void *value,  	if (!btrfs_is_valid_xattr(name))  		return -EOPNOTSUPP; +	if (!strncmp(name, XATTR_BTRFS_PREFIX, XATTR_BTRFS_PREFIX_LEN)) +		return btrfs_set_prop(dentry->d_inode, name, +				      value, size, flags); +  	if (size == 0)  		value = "";  /* empty EA, do not remove */ @@ -402,6 +409,10 @@ int btrfs_removexattr(struct dentry *dentry, const char *name)  	if (!btrfs_is_valid_xattr(name))  		return -EOPNOTSUPP; +	if (!strncmp(name, XATTR_BTRFS_PREFIX, XATTR_BTRFS_PREFIX_LEN)) +		return btrfs_set_prop(dentry->d_inode, name, +				      NULL, 0, XATTR_REPLACE); +  	return __btrfs_setxattr(NULL, dentry->d_inode, name, NULL, 0,  				XATTR_REPLACE);  }  | 
