diff options
author | Alex Shi <alex.shi@linaro.org> | 2018-03-13 12:02:13 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2018-03-13 12:02:13 +0800 |
commit | c87aba7d0caf207f717c52ba9271d6185576d9aa (patch) | |
tree | 5b1dacece160aa0d6b335332f50d550528fa25fa /fs | |
parent | 6aa8d8c0cd18d30d4a80367222eca75a0c2591ff (diff) | |
parent | 0bdf4ea52af04501c69799babfdd0b38cbf0299e (diff) |
Merge branch 'linux-linaro-lsk-v4.4' into linux-linaro-lsk-v4.4-android
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/acl.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c index fb3e64d37cb4..6b16b8653d98 100644 --- a/fs/btrfs/acl.c +++ b/fs/btrfs/acl.c @@ -82,12 +82,6 @@ static int __btrfs_set_acl(struct btrfs_trans_handle *trans, switch (type) { case ACL_TYPE_ACCESS: name = POSIX_ACL_XATTR_ACCESS; - if (acl) { - ret = posix_acl_update_mode(inode, &inode->i_mode, &acl); - if (ret) - return ret; - } - ret = 0; break; case ACL_TYPE_DEFAULT: if (!S_ISDIR(inode->i_mode)) @@ -123,7 +117,18 @@ out: int btrfs_set_acl(struct inode *inode, struct posix_acl *acl, int type) { - return __btrfs_set_acl(NULL, inode, acl, type); + int ret; + umode_t old_mode = inode->i_mode; + + if (type == ACL_TYPE_ACCESS && acl) { + ret = posix_acl_update_mode(inode, &inode->i_mode, &acl); + if (ret) + return ret; + } + ret = __btrfs_set_acl(NULL, inode, acl, type); + if (ret) + inode->i_mode = old_mode; + return ret; } /* |