|
@@ -262,8 +262,8 @@ static int f2fs_set_acl(struct inode *inode, int type, struct posix_acl *acl)
|
|
|
|
|
|
int f2fs_init_acl(struct inode *inode, struct inode *dir)
|
|
|
{
|
|
|
- struct posix_acl *acl = NULL;
|
|
|
struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
|
|
|
+ struct posix_acl *acl = NULL;
|
|
|
int error = 0;
|
|
|
|
|
|
if (!S_ISLNK(inode->i_mode)) {
|
|
@@ -276,19 +276,19 @@ int f2fs_init_acl(struct inode *inode, struct inode *dir)
|
|
|
inode->i_mode &= ~current_umask();
|
|
|
}
|
|
|
|
|
|
- if (test_opt(sbi, POSIX_ACL) && acl) {
|
|
|
+ if (!test_opt(sbi, POSIX_ACL) || !acl)
|
|
|
+ goto cleanup;
|
|
|
|
|
|
- if (S_ISDIR(inode->i_mode)) {
|
|
|
- error = f2fs_set_acl(inode, ACL_TYPE_DEFAULT, acl);
|
|
|
- if (error)
|
|
|
- goto cleanup;
|
|
|
- }
|
|
|
- error = posix_acl_create(&acl, GFP_KERNEL, &inode->i_mode);
|
|
|
- if (error < 0)
|
|
|
- return error;
|
|
|
- if (error > 0)
|
|
|
- error = f2fs_set_acl(inode, ACL_TYPE_ACCESS, acl);
|
|
|
+ if (S_ISDIR(inode->i_mode)) {
|
|
|
+ error = f2fs_set_acl(inode, ACL_TYPE_DEFAULT, acl);
|
|
|
+ if (error)
|
|
|
+ goto cleanup;
|
|
|
}
|
|
|
+ error = posix_acl_create(&acl, GFP_KERNEL, &inode->i_mode);
|
|
|
+ if (error < 0)
|
|
|
+ return error;
|
|
|
+ if (error > 0)
|
|
|
+ error = f2fs_set_acl(inode, ACL_TYPE_ACCESS, acl);
|
|
|
cleanup:
|
|
|
posix_acl_release(acl);
|
|
|
return error;
|
|
@@ -313,6 +313,7 @@ int f2fs_acl_chmod(struct inode *inode)
|
|
|
error = posix_acl_chmod(&acl, GFP_KERNEL, mode);
|
|
|
if (error)
|
|
|
return error;
|
|
|
+
|
|
|
error = f2fs_set_acl(inode, ACL_TYPE_ACCESS, acl);
|
|
|
posix_acl_release(acl);
|
|
|
return error;
|