summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/gfs2/acl.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/fs/gfs2/acl.c b/fs/gfs2/acl.c
index a6d962323790..9d5eecb123de 100644
--- a/fs/gfs2/acl.c
+++ b/fs/gfs2/acl.c
@@ -116,6 +116,7 @@ int gfs2_set_acl(struct inode *inode, struct posix_acl *acl, int type)
struct gfs2_holder gh;
bool need_unlock = false;
int ret;
+ umode_t mode;
if (acl && acl->a_count > GFS2_ACL_MAX_ENTRIES(GFS2_SB(inode)))
return -E2BIG;
@@ -130,17 +131,19 @@ int gfs2_set_acl(struct inode *inode, struct posix_acl *acl, int type)
return ret;
need_unlock = true;
}
- if (type == ACL_TYPE_ACCESS && acl) {
- umode_t mode = inode->i_mode;
- ret = posix_acl_update_mode(inode, &inode->i_mode, &acl);
+ mode = inode->i_mode;
+ if (type == ACL_TYPE_ACCESS && acl) {
+ ret = posix_acl_update_mode(inode, &mode, &acl);
if (ret)
goto unlock;
- if (mode != inode->i_mode)
- mark_inode_dirty(inode);
}
ret = __gfs2_set_acl(inode, acl, type);
+ if (!ret && mode != inode->i_mode) {
+ inode->i_mode = mode;
+ mark_inode_dirty(inode);
+ }
unlock:
if (need_unlock)
gfs2_glock_dq_uninit(&gh);