diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-07-25 08:51:57 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-07-25 08:51:57 -0700 |
commit | 25f6a53799d667283d3bee29a6ac75ae3dae38dc (patch) | |
tree | 9af7509d3ab1ddce7e5a5672cbd7aa3ca5d27c6f /fs/jfs/acl.c | |
parent | a9d0683e0b62b46c7a5d0ebd8f642d8f9a4b7b32 (diff) | |
parent | f070e5ac9bc7de71c34402048ce5526dccbd347c (diff) | |
download | linux-0-day-25f6a53799d667283d3bee29a6ac75ae3dae38dc.tar.gz linux-0-day-25f6a53799d667283d3bee29a6ac75ae3dae38dc.tar.xz |
Merge tag 'jfs-4.13' of git://github.com/kleikamp/linux-shaggy
Pull JFS fixes from David Kleikamp.
* tag 'jfs-4.13' of git://github.com/kleikamp/linux-shaggy:
jfs: preserve i_mode if __jfs_set_acl() fails
jfs: Don't clear SGID when inheriting ACLs
jfs: atomically read inode size
Diffstat (limited to 'fs/jfs/acl.c')
-rw-r--r-- | fs/jfs/acl.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/fs/jfs/acl.c b/fs/jfs/acl.c index 7bc186f4ed4de..2e71b6e7e646a 100644 --- a/fs/jfs/acl.c +++ b/fs/jfs/acl.c @@ -77,13 +77,6 @@ static int __jfs_set_acl(tid_t tid, struct inode *inode, int type, switch (type) { case ACL_TYPE_ACCESS: ea_name = XATTR_NAME_POSIX_ACL_ACCESS; - if (acl) { - rc = posix_acl_update_mode(inode, &inode->i_mode, &acl); - if (rc) - return rc; - inode->i_ctime = current_time(inode); - mark_inode_dirty(inode); - } break; case ACL_TYPE_DEFAULT: ea_name = XATTR_NAME_POSIX_ACL_DEFAULT; @@ -115,12 +108,27 @@ int jfs_set_acl(struct inode *inode, struct posix_acl *acl, int type) { int rc; tid_t tid; + int update_mode = 0; + umode_t mode = inode->i_mode; tid = txBegin(inode->i_sb, 0); mutex_lock(&JFS_IP(inode)->commit_mutex); + if (type == ACL_TYPE_ACCESS && acl) { + rc = posix_acl_update_mode(inode, &mode, &acl); + if (rc) + goto end_tx; + update_mode = 1; + } rc = __jfs_set_acl(tid, inode, type, acl); - if (!rc) + if (!rc) { + if (update_mode) { + inode->i_mode = mode; + inode->i_ctime = current_time(inode); + mark_inode_dirty(inode); + } rc = txCommit(tid, 1, &inode, 0); + } +end_tx: txEnd(tid); mutex_unlock(&JFS_IP(inode)->commit_mutex); return rc; |