]> Pileus Git - ~andy/linux/blobdiff - fs/ext2/acl.c
kill boilerplates around posix_acl_create_masq()
[~andy/linux] / fs / ext2 / acl.c
index 1226dbcc66f5e581d4ca5eeef50d8b048e85d277..ba99fa4b2f35af628ecf89357122adafbc93a144 100644 (file)
@@ -270,29 +270,20 @@ ext2_init_acl(struct inode *inode, struct inode *dir)
                        inode->i_mode &= ~current_umask();
        }
        if (test_opt(inode->i_sb, POSIX_ACL) && acl) {
-               struct posix_acl *clone;
-              mode_t mode;
-
+               mode_t mode = inode->i_mode;
                if (S_ISDIR(inode->i_mode)) {
                        error = ext2_set_acl(inode, ACL_TYPE_DEFAULT, acl);
                        if (error)
                                goto cleanup;
                }
-               clone = posix_acl_clone(acl, GFP_KERNEL);
-               error = -ENOMEM;
-               if (!clone)
-                       goto cleanup;
-               mode = inode->i_mode;
-               error = posix_acl_create_masq(clone, &mode);
-               if (error >= 0) {
-                       inode->i_mode = mode;
-                       if (error > 0) {
-                               /* This is an extended ACL */
-                               error = ext2_set_acl(inode,
-                                                    ACL_TYPE_ACCESS, clone);
-                       }
+               error = posix_acl_create(&acl, GFP_KERNEL, &mode);
+               if (error < 0)
+                       return error;
+               inode->i_mode = mode;
+               if (error > 0) {
+                       /* This is an extended ACL */
+                       error = ext2_set_acl(inode, ACL_TYPE_ACCESS, acl);
                }
-               posix_acl_release(clone);
        }
 cleanup:
        posix_acl_release(acl);