]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/acl.c
Update bcachefs sources to b964c6cba8 bcachefs: Change lockrestart_do() to always...
[bcachefs-tools-debian] / libbcachefs / acl.c
index 5408a9225fe50025af1badea356541c6422d10cb..eb907e5d33d3fcf364f0f977d390d916336d391d 100644 (file)
@@ -221,6 +221,8 @@ struct posix_acl *bch2_get_acl(struct inode *vinode, int type)
        struct btree_iter *iter;
        struct bkey_s_c_xattr xattr;
        struct posix_acl *acl = NULL;
+       struct bkey_s_c k;
+       int ret;
 
        bch2_trans_init(&trans, c, 0, 0);
 retry:
@@ -239,7 +241,14 @@ retry:
                goto out;
        }
 
-       xattr = bkey_s_c_to_xattr(bch2_btree_iter_peek_slot(iter));
+       k = bch2_btree_iter_peek_slot(iter);
+       ret = bkey_err(k);
+       if (ret) {
+               acl = ERR_PTR(ret);
+               goto out;
+       }
+
+       xattr = bkey_s_c_to_xattr(k);
        acl = bch2_acl_from_disk(xattr_val(xattr.v),
                        le16_to_cpu(xattr.v->x_val_len));
 
@@ -325,8 +334,7 @@ retry:
 
        ret =   bch2_inode_write(&trans, inode_iter, &inode_u) ?:
                bch2_trans_commit(&trans, NULL,
-                                 &inode->ei_journal_seq,
-                                 BTREE_INSERT_NOUNLOCK);
+                                 &inode->ei_journal_seq, 0);
 btree_err:
        bch2_trans_iter_put(&trans, inode_iter);
 
@@ -356,6 +364,7 @@ int bch2_acl_chmod(struct btree_trans *trans,
        struct bkey_s_c_xattr xattr;
        struct bkey_i_xattr *new;
        struct posix_acl *acl;
+       struct bkey_s_c k;
        int ret;
 
        iter = bch2_hash_lookup(trans, bch2_xattr_hash_desc,
@@ -366,7 +375,11 @@ int bch2_acl_chmod(struct btree_trans *trans,
        if (ret)
                return ret == -ENOENT ? 0 : ret;
 
-       xattr = bkey_s_c_to_xattr(bch2_btree_iter_peek_slot(iter));
+       k = bch2_btree_iter_peek_slot(iter);
+       xattr = bkey_s_c_to_xattr(k);
+       if (ret)
+               goto err;
+
        acl = bch2_acl_from_disk(xattr_val(xattr.v),
                        le16_to_cpu(xattr.v->x_val_len));
        ret = PTR_ERR_OR_ZERO(acl);