summaryrefslogtreecommitdiff
path: root/libbcachefs/acl.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-08-15 19:41:24 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2018-08-15 20:00:21 -0400
commitcef2f30ae2a25df41704b9b06fc13882d737cc27 (patch)
tree245f69c300067dc638eff7c6bc5bbc545fdf81f1 /libbcachefs/acl.c
parent9c62b2b4f11374cbffe88e0c31b9b1ab32a2863a (diff)
Update bcachefs sources to 15f6e66e86 bcachefs: pass around bset_tree less
Diffstat (limited to 'libbcachefs/acl.c')
-rw-r--r--libbcachefs/acl.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/libbcachefs/acl.c b/libbcachefs/acl.c
index 534ea94e..5dd666ec 100644
--- a/libbcachefs/acl.c
+++ b/libbcachefs/acl.c
@@ -284,10 +284,9 @@ static int inode_update_for_set_acl_fn(struct bch_inode_info *inode,
void *p)
{
struct bch_fs *c = inode->v.i_sb->s_fs_info;
- struct timespec now = current_time(&inode->v);
umode_t mode = (unsigned long) p;
- bi->bi_ctime = timespec_to_bch2_time(c, now);
+ bi->bi_ctime = bch2_current_time(c);
bi->bi_mode = mode;
return 0;
}
@@ -301,13 +300,14 @@ int bch2_set_acl(struct inode *vinode, struct posix_acl *acl, int type)
umode_t mode = inode->v.i_mode;
int ret;
+ mutex_lock(&inode->ei_update_lock);
+ bch2_trans_init(&trans, c);
+
if (type == ACL_TYPE_ACCESS && acl) {
ret = posix_acl_update_mode(&inode->v, &mode, &acl);
if (ret)
- return ret;
+ goto err;
}
-
- bch2_trans_init(&trans, c);
retry:
bch2_trans_begin(&trans);
@@ -318,7 +318,7 @@ retry:
bch2_write_inode_trans(&trans, inode, &inode_u,
inode_update_for_set_acl_fn,
(void *)(unsigned long) mode) ?:
- bch2_trans_commit(&trans, NULL, NULL,
+ bch2_trans_commit(&trans, NULL,
&inode->ei_journal_seq,
BTREE_INSERT_ATOMIC|
BTREE_INSERT_NOUNLOCK);
@@ -333,6 +333,7 @@ retry:
set_cached_acl(&inode->v, type, acl);
err:
bch2_trans_exit(&trans);
+ mutex_unlock(&inode->ei_update_lock);
return ret;
}
@@ -372,7 +373,7 @@ int bch2_acl_chmod(struct btree_trans *trans,
goto err;
}
- bch2_trans_update(trans, iter, &new->k_i, 0);
+ bch2_trans_update(trans, BTREE_INSERT_ENTRY(iter, &new->k_i));
*new_acl = acl;
acl = NULL;
err: