Merge tag 'ovl-update-5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs
[linux-2.6-microblaze.git] / fs / btrfs / acl.c
index d95eb5c..0a0d0ec 100644 (file)
 #include "btrfs_inode.h"
 #include "xattr.h"
 
-struct posix_acl *btrfs_get_acl(struct inode *inode, int type)
+struct posix_acl *btrfs_get_acl(struct inode *inode, int type, bool rcu)
 {
        int size;
        const char *name;
        char *value = NULL;
        struct posix_acl *acl;
 
+       if (rcu)
+               return ERR_PTR(-ECHILD);
+
        switch (type) {
        case ACL_TYPE_ACCESS:
                name = XATTR_NAME_POSIX_ACL_ACCESS;
@@ -53,7 +56,8 @@ struct posix_acl *btrfs_get_acl(struct inode *inode, int type)
 }
 
 static int __btrfs_set_acl(struct btrfs_trans_handle *trans,
-                        struct inode *inode, struct posix_acl *acl, int type)
+                          struct user_namespace *mnt_userns,
+                          struct inode *inode, struct posix_acl *acl, int type)
 {
        int ret, size = 0;
        const char *name;
@@ -114,12 +118,12 @@ int btrfs_set_acl(struct user_namespace *mnt_userns, struct inode *inode,
        umode_t old_mode = inode->i_mode;
 
        if (type == ACL_TYPE_ACCESS && acl) {
-               ret = posix_acl_update_mode(&init_user_ns, inode,
+               ret = posix_acl_update_mode(mnt_userns, inode,
                                            &inode->i_mode, &acl);
                if (ret)
                        return ret;
        }
-       ret = __btrfs_set_acl(NULL, inode, acl, type);
+       ret = __btrfs_set_acl(NULL, mnt_userns, inode, acl, type);
        if (ret)
                inode->i_mode = old_mode;
        return ret;
@@ -140,14 +144,14 @@ int btrfs_init_acl(struct btrfs_trans_handle *trans,
                return ret;
 
        if (default_acl) {
-               ret = __btrfs_set_acl(trans, inode, default_acl,
+               ret = __btrfs_set_acl(trans, &init_user_ns, inode, default_acl,
                                      ACL_TYPE_DEFAULT);
                posix_acl_release(default_acl);
        }
 
        if (acl) {
                if (!ret)
-                       ret = __btrfs_set_acl(trans, inode, acl,
+                       ret = __btrfs_set_acl(trans, &init_user_ns, inode, acl,
                                              ACL_TYPE_ACCESS);
                posix_acl_release(acl);
        }