diff options
-rw-r--r-- | fs/gfs2/acl.c | 13 |
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); |