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;
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);