Commit e0d46f5c authored by Andreas Gruenbacher's avatar Andreas Gruenbacher Committed by Al Viro

btrfs: Switch to generic xattr handlers

The btrfs_{set,remove}xattr inode operations check for a read-only root
(btrfs_root_readonly) before calling into generic_{set,remove}xattr.  If
this check is moved into __btrfs_setxattr, we can get rid of
btrfs_{set,remove}xattr.

This patch applies to mainline, I would like to keep it together with
the other xattr cleanups if possible, though.  Could you please review?

Thanks,
Andreas
Signed-off-by: default avatarAndreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 2b88fc21
...@@ -10160,10 +10160,10 @@ static const struct inode_operations btrfs_dir_inode_operations = { ...@@ -10160,10 +10160,10 @@ static const struct inode_operations btrfs_dir_inode_operations = {
.symlink = btrfs_symlink, .symlink = btrfs_symlink,
.setattr = btrfs_setattr, .setattr = btrfs_setattr,
.mknod = btrfs_mknod, .mknod = btrfs_mknod,
.setxattr = btrfs_setxattr, .setxattr = generic_setxattr,
.getxattr = generic_getxattr, .getxattr = generic_getxattr,
.listxattr = btrfs_listxattr, .listxattr = btrfs_listxattr,
.removexattr = btrfs_removexattr, .removexattr = generic_removexattr,
.permission = btrfs_permission, .permission = btrfs_permission,
.get_acl = btrfs_get_acl, .get_acl = btrfs_get_acl,
.set_acl = btrfs_set_acl, .set_acl = btrfs_set_acl,
...@@ -10237,10 +10237,10 @@ static const struct address_space_operations btrfs_symlink_aops = { ...@@ -10237,10 +10237,10 @@ static const struct address_space_operations btrfs_symlink_aops = {
static const struct inode_operations btrfs_file_inode_operations = { static const struct inode_operations btrfs_file_inode_operations = {
.getattr = btrfs_getattr, .getattr = btrfs_getattr,
.setattr = btrfs_setattr, .setattr = btrfs_setattr,
.setxattr = btrfs_setxattr, .setxattr = generic_setxattr,
.getxattr = generic_getxattr, .getxattr = generic_getxattr,
.listxattr = btrfs_listxattr, .listxattr = btrfs_listxattr,
.removexattr = btrfs_removexattr, .removexattr = generic_removexattr,
.permission = btrfs_permission, .permission = btrfs_permission,
.fiemap = btrfs_fiemap, .fiemap = btrfs_fiemap,
.get_acl = btrfs_get_acl, .get_acl = btrfs_get_acl,
...@@ -10251,10 +10251,10 @@ static const struct inode_operations btrfs_special_inode_operations = { ...@@ -10251,10 +10251,10 @@ static const struct inode_operations btrfs_special_inode_operations = {
.getattr = btrfs_getattr, .getattr = btrfs_getattr,
.setattr = btrfs_setattr, .setattr = btrfs_setattr,
.permission = btrfs_permission, .permission = btrfs_permission,
.setxattr = btrfs_setxattr, .setxattr = generic_setxattr,
.getxattr = generic_getxattr, .getxattr = generic_getxattr,
.listxattr = btrfs_listxattr, .listxattr = btrfs_listxattr,
.removexattr = btrfs_removexattr, .removexattr = generic_removexattr,
.get_acl = btrfs_get_acl, .get_acl = btrfs_get_acl,
.set_acl = btrfs_set_acl, .set_acl = btrfs_set_acl,
.update_time = btrfs_update_time, .update_time = btrfs_update_time,
...@@ -10265,10 +10265,10 @@ static const struct inode_operations btrfs_symlink_inode_operations = { ...@@ -10265,10 +10265,10 @@ static const struct inode_operations btrfs_symlink_inode_operations = {
.getattr = btrfs_getattr, .getattr = btrfs_getattr,
.setattr = btrfs_setattr, .setattr = btrfs_setattr,
.permission = btrfs_permission, .permission = btrfs_permission,
.setxattr = btrfs_setxattr, .setxattr = generic_setxattr,
.getxattr = generic_getxattr, .getxattr = generic_getxattr,
.listxattr = btrfs_listxattr, .listxattr = btrfs_listxattr,
.removexattr = btrfs_removexattr, .removexattr = generic_removexattr,
.update_time = btrfs_update_time, .update_time = btrfs_update_time,
}; };
......
...@@ -237,6 +237,9 @@ int __btrfs_setxattr(struct btrfs_trans_handle *trans, ...@@ -237,6 +237,9 @@ int __btrfs_setxattr(struct btrfs_trans_handle *trans,
struct btrfs_root *root = BTRFS_I(inode)->root; struct btrfs_root *root = BTRFS_I(inode)->root;
int ret; int ret;
if (btrfs_root_readonly(root))
return -EROFS;
if (trans) if (trans)
return do_setxattr(trans, inode, name, value, size, flags); return do_setxattr(trans, inode, name, value, size, flags);
...@@ -432,25 +435,6 @@ const struct xattr_handler *btrfs_xattr_handlers[] = { ...@@ -432,25 +435,6 @@ const struct xattr_handler *btrfs_xattr_handlers[] = {
NULL, NULL,
}; };
int btrfs_setxattr(struct dentry *dentry, const char *name, const void *value,
size_t size, int flags)
{
struct btrfs_root *root = BTRFS_I(d_inode(dentry))->root;
if (btrfs_root_readonly(root))
return -EROFS;
return generic_setxattr(dentry, name, value, size, flags);
}
int btrfs_removexattr(struct dentry *dentry, const char *name)
{
struct btrfs_root *root = BTRFS_I(d_inode(dentry))->root;
if (btrfs_root_readonly(root))
return -EROFS;
return generic_removexattr(dentry, name);
}
static int btrfs_initxattrs(struct inode *inode, static int btrfs_initxattrs(struct inode *inode,
const struct xattr *xattr_array, void *fs_info) const struct xattr *xattr_array, void *fs_info)
{ {
......
...@@ -28,9 +28,6 @@ extern ssize_t __btrfs_getxattr(struct inode *inode, const char *name, ...@@ -28,9 +28,6 @@ extern ssize_t __btrfs_getxattr(struct inode *inode, const char *name,
extern int __btrfs_setxattr(struct btrfs_trans_handle *trans, extern int __btrfs_setxattr(struct btrfs_trans_handle *trans,
struct inode *inode, const char *name, struct inode *inode, const char *name,
const void *value, size_t size, int flags); const void *value, size_t size, int flags);
extern int btrfs_setxattr(struct dentry *dentry, const char *name,
const void *value, size_t size, int flags);
extern int btrfs_removexattr(struct dentry *dentry, const char *name);
extern int btrfs_xattr_security_init(struct btrfs_trans_handle *trans, extern int btrfs_xattr_security_init(struct btrfs_trans_handle *trans,
struct inode *inode, struct inode *dir, struct inode *inode, struct inode *dir,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment