summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-02-05 02:50:47 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2018-02-05 02:50:47 -0500
commit37924cb36e8e67da483459c6963004e132227efe (patch)
treedd96e487e445db5ec771e343bf068a7a3fe7633d
parent7ca94bff08883ab97dc1e4e3bbe1c63cc66be9bb (diff)
bcachefs: call posix_acl_update_mode() from bch2_set_acl
fixes xfstest 375
-rw-r--r--fs/bcachefs/acl.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/fs/bcachefs/acl.c b/fs/bcachefs/acl.c
index 480941d64e2a..4016ab965972 100644
--- a/fs/bcachefs/acl.c
+++ b/fs/bcachefs/acl.c
@@ -185,6 +185,24 @@ int bch2_set_acl(struct inode *vinode, struct posix_acl *acl, int type)
size_t size = 0;
int ret;
+ if (type == ACL_TYPE_ACCESS && acl) {
+ umode_t mode = inode->v.i_mode;
+
+ ret = posix_acl_update_mode(&inode->v, &mode, &acl);
+ if (ret)
+ return ret;
+
+ mutex_lock(&inode->ei_update_lock);
+ inode->v.i_mode = mode;
+ inode->v.i_ctime = current_time(&inode->v);
+
+ ret = bch2_write_inode(c, inode);
+ mutex_unlock(&inode->ei_update_lock);
+
+ if (ret)
+ return ret;
+ }
+
switch (type) {
case ACL_TYPE_ACCESS:
name_index = BCH_XATTR_INDEX_POSIX_ACL_ACCESS;