btrfs: Switch to generic xattr handlers
authorAndreas Gruenbacher <agruenba@redhat.com>
Fri, 22 Apr 2016 20:36:44 +0000 (22:36 +0200)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 17 May 2016 23:17:09 +0000 (19:17 -0400)
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: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/btrfs/inode.c
fs/btrfs/xattr.c
fs/btrfs/xattr.h

index 41a5688ffdfe8d57a61a642dce6c6ee80c3872f8..0077b3b49e5e2fb3889e7dd20197a9f338061cd3 100644 (file)
@@ -10160,10 +10160,10 @@ static const struct inode_operations btrfs_dir_inode_operations = {
        .symlink        = btrfs_symlink,
        .setattr        = btrfs_setattr,
        .mknod          = btrfs_mknod,
-       .setxattr       = btrfs_setxattr,
+       .setxattr       = generic_setxattr,
        .getxattr       = generic_getxattr,
        .listxattr      = btrfs_listxattr,
-       .removexattr    = btrfs_removexattr,
+       .removexattr    = generic_removexattr,
        .permission     = btrfs_permission,
        .get_acl        = btrfs_get_acl,
        .set_acl        = btrfs_set_acl,
@@ -10237,10 +10237,10 @@ static const struct address_space_operations btrfs_symlink_aops = {
 static const struct inode_operations btrfs_file_inode_operations = {
        .getattr        = btrfs_getattr,
        .setattr        = btrfs_setattr,
-       .setxattr       = btrfs_setxattr,
+       .setxattr       = generic_setxattr,
        .getxattr       = generic_getxattr,
        .listxattr      = btrfs_listxattr,
-       .removexattr    = btrfs_removexattr,
+       .removexattr    = generic_removexattr,
        .permission     = btrfs_permission,
        .fiemap         = btrfs_fiemap,
        .get_acl        = btrfs_get_acl,
@@ -10251,10 +10251,10 @@ static const struct inode_operations btrfs_special_inode_operations = {
        .getattr        = btrfs_getattr,
        .setattr        = btrfs_setattr,
        .permission     = btrfs_permission,
-       .setxattr       = btrfs_setxattr,
+       .setxattr       = generic_setxattr,
        .getxattr       = generic_getxattr,
        .listxattr      = btrfs_listxattr,
-       .removexattr    = btrfs_removexattr,
+       .removexattr    = generic_removexattr,
        .get_acl        = btrfs_get_acl,
        .set_acl        = btrfs_set_acl,
        .update_time    = btrfs_update_time,
@@ -10265,10 +10265,10 @@ static const struct inode_operations btrfs_symlink_inode_operations = {
        .getattr        = btrfs_getattr,
        .setattr        = btrfs_setattr,
        .permission     = btrfs_permission,
-       .setxattr       = btrfs_setxattr,
+       .setxattr       = generic_setxattr,
        .getxattr       = generic_getxattr,
        .listxattr      = btrfs_listxattr,
-       .removexattr    = btrfs_removexattr,
+       .removexattr    = generic_removexattr,
        .update_time    = btrfs_update_time,
 };
 
index 03224b00ea70fb7cd190d8119e5e6eac4fbda8f8..3bfb252206c7c678f5da79333543fa3ce0af8659 100644 (file)
@@ -237,6 +237,9 @@ int __btrfs_setxattr(struct btrfs_trans_handle *trans,
        struct btrfs_root *root = BTRFS_I(inode)->root;
        int ret;
 
+       if (btrfs_root_readonly(root))
+               return -EROFS;
+
        if (trans)
                return do_setxattr(trans, inode, name, value, size, flags);
 
@@ -432,25 +435,6 @@ const struct xattr_handler *btrfs_xattr_handlers[] = {
        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,
                            const struct xattr *xattr_array, void *fs_info)
 {
index 96807b3d22f502d3cf5a683dab48ed7602845325..15fc4743dc7003339610ca04afefcf5a9978fe92 100644 (file)
@@ -28,9 +28,6 @@ extern ssize_t __btrfs_getxattr(struct inode *inode, const char *name,
 extern int __btrfs_setxattr(struct btrfs_trans_handle *trans,
                            struct inode *inode, const char *name,
                            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,
                                     struct inode *inode, struct inode *dir,