]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: Kill ei_str_hash
authorKent Overstreet <kent.overstreet@gmail.com>
Tue, 2 Mar 2021 23:35:30 +0000 (18:35 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:55 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/acl.c
fs/bcachefs/acl.h
fs/bcachefs/fs-ioctl.c
fs/bcachefs/fs.c
fs/bcachefs/fs.h
fs/bcachefs/xattr.c

index acc1d03c79e4fce8209115bb87c4ec81747f3c89..3879815bcede302f5f3ed719a791b1ed4d854792 100644 (file)
@@ -217,6 +217,7 @@ struct posix_acl *bch2_get_acl(struct mnt_idmap *idmap,
 {
        struct bch_inode_info *inode = to_bch_ei(dentry->d_inode);
        struct bch_fs *c = inode->v.i_sb->s_fs_info;
+       struct bch_hash_info hash = bch2_hash_info_init(c, &inode->ei_inode);
        struct btree_trans trans;
        struct btree_iter *iter;
        struct bkey_s_c_xattr xattr;
@@ -227,7 +228,7 @@ retry:
        bch2_trans_begin(&trans);
 
        iter = bch2_hash_lookup(&trans, bch2_xattr_hash_desc,
-                       &inode->ei_str_hash, inode->v.i_ino,
+                       &hash, inode->v.i_ino,
                        &X_SEARCH(acl_to_xattr_type(type), "", 0),
                        0);
        if (IS_ERR(iter)) {
@@ -290,6 +291,7 @@ int bch2_set_acl(struct mnt_idmap *idmap,
        struct btree_trans trans;
        struct btree_iter *inode_iter;
        struct bch_inode_unpacked inode_u;
+       struct bch_hash_info hash_info;
        struct posix_acl *acl;
        umode_t mode;
        int ret;
@@ -314,9 +316,9 @@ retry:
                        goto err;
        }
 
-       ret = bch2_set_acl_trans(&trans, &inode_u,
-                                &inode->ei_str_hash,
-                                acl, type);
+       hash_info = bch2_hash_info_init(c, &inode_u);
+
+       ret = bch2_set_acl_trans(&trans, &inode_u, &hash_info, acl, type);
        if (ret)
                goto btree_err;
 
@@ -345,10 +347,11 @@ err:
 }
 
 int bch2_acl_chmod(struct btree_trans *trans,
-                  struct bch_inode_info *inode,
+                  struct bch_inode_unpacked *inode,
                   umode_t mode,
                   struct posix_acl **new_acl)
 {
+       struct bch_hash_info hash_info = bch2_hash_info_init(trans->c, inode);
        struct btree_iter *iter;
        struct bkey_s_c_xattr xattr;
        struct bkey_i_xattr *new;
@@ -356,7 +359,7 @@ int bch2_acl_chmod(struct btree_trans *trans,
        int ret = 0;
 
        iter = bch2_hash_lookup(trans, bch2_xattr_hash_desc,
-                       &inode->ei_str_hash, inode->v.i_ino,
+                       &hash_info, inode->bi_inum,
                        &X_SEARCH(KEY_TYPE_XATTR_INDEX_POSIX_ACL_ACCESS, "", 0),
                        BTREE_ITER_INTENT);
        if (IS_ERR(iter))
index 73739e38e2d57ec6797d6ca3fdcca829e129f58f..f11eb9d4592c470ad496d42136ba042786b66c59 100644 (file)
@@ -33,7 +33,7 @@ int bch2_set_acl_trans(struct btree_trans *,
                       const struct bch_hash_info *,
                       struct posix_acl *, int);
 int bch2_set_acl(struct mnt_idmap *, struct dentry *, struct posix_acl *, int);
-int bch2_acl_chmod(struct btree_trans *, struct bch_inode_info *,
+int bch2_acl_chmod(struct btree_trans *, struct bch_inode_unpacked *,
                   umode_t, struct posix_acl **);
 
 #else
@@ -47,7 +47,7 @@ static inline int bch2_set_acl_trans(struct btree_trans *trans,
 }
 
 static inline int bch2_acl_chmod(struct btree_trans *trans,
-                                struct bch_inode_info *inode,
+                                struct bch_inode_unpacked *inode,
                                 umode_t mode,
                                 struct posix_acl **new_acl)
 {
index f6773783b958b34630b22af030b008ad96badf88..09a9567b402c34e0b31e584ac066bab04e332ab0 100644 (file)
@@ -183,6 +183,7 @@ static int bch2_ioc_reinherit_attrs(struct bch_fs *c,
                                    struct bch_inode_info *src,
                                    const char __user *name)
 {
+       struct bch_hash_info hash = bch2_hash_info_init(c, &src->ei_inode);
        struct bch_inode_info *dst;
        struct inode *vinode = NULL;
        char *kname = NULL;
@@ -202,8 +203,7 @@ static int bch2_ioc_reinherit_attrs(struct bch_fs *c,
        qstr.name       = kname;
 
        ret = -ENOENT;
-       inum = bch2_dirent_lookup(c, src->v.i_ino,
-                                 &src->ei_str_hash,
+       inum = bch2_dirent_lookup(c, src->v.i_ino, &hash,
                                  &qstr);
        if (!inum)
                goto err1;
index a168d09ffd372ac6843b325745505e14827370fc..ef8505da7391664e7e159d5f602089cf315c4f19 100644 (file)
@@ -370,11 +370,11 @@ static struct dentry *bch2_lookup(struct inode *vdir, struct dentry *dentry,
 {
        struct bch_fs *c = vdir->i_sb->s_fs_info;
        struct bch_inode_info *dir = to_bch_ei(vdir);
+       struct bch_hash_info hash = bch2_hash_info_init(c, &dir->ei_inode);
        struct inode *vinode = NULL;
        u64 inum;
 
-       inum = bch2_dirent_lookup(c, dir->v.i_ino,
-                                 &dir->ei_str_hash,
+       inum = bch2_dirent_lookup(c, dir->v.i_ino, &hash,
                                  &dentry->d_name);
 
        if (inum)
@@ -723,7 +723,7 @@ retry:
        bch2_setattr_copy(idmap, inode, &inode_u, attr);
 
        if (attr->ia_valid & ATTR_MODE) {
-               ret = bch2_acl_chmod(&trans, inode, inode_u.bi_mode, &acl);
+               ret = bch2_acl_chmod(&trans, &inode_u, inode_u.bi_mode, &acl);
                if (ret)
                        goto btree_err;
        }
@@ -1150,7 +1150,6 @@ static void bch2_vfs_inode_init(struct bch_fs *c,
        inode->ei_flags         = 0;
        inode->ei_journal_seq   = 0;
        inode->ei_quota_reserved = 0;
-       inode->ei_str_hash      = bch2_hash_info_init(c, bi);
        inode->ei_qid           = bch_qid(bi);
 
        inode->v.i_mapping->a_ops = &bch_address_space_operations;
index 8c2796aa7abf5ee5737dc384d4a1af35f2b98810..f3072780af51762f58b88697c158ba2f9a931fd6 100644 (file)
@@ -44,8 +44,6 @@ struct bch_inode_info {
        struct mutex            ei_quota_lock;
        struct bch_qid          ei_qid;
 
-       struct bch_hash_info    ei_str_hash;
-
        /* copy of inode in btree: */
        struct bch_inode_unpacked ei_inode;
 };
index 5555d45df54e29548f0a422f54b1d29e0be5995f..5692b47eb3c9604f13b9f4309419966455cf37cf 100644 (file)
@@ -121,6 +121,7 @@ void bch2_xattr_to_text(struct printbuf *out, struct bch_fs *c,
 int bch2_xattr_get(struct bch_fs *c, struct bch_inode_info *inode,
                   const char *name, void *buffer, size_t size, int type)
 {
+       struct bch_hash_info hash = bch2_hash_info_init(c, &inode->ei_inode);
        struct btree_trans trans;
        struct btree_iter *iter;
        struct bkey_s_c_xattr xattr;
@@ -128,8 +129,8 @@ int bch2_xattr_get(struct bch_fs *c, struct bch_inode_info *inode,
 
        bch2_trans_init(&trans, c, 0, 0);
 
-       iter = bch2_hash_lookup(&trans, bch2_xattr_hash_desc,
-                               &inode->ei_str_hash, inode->v.i_ino,
+       iter = bch2_hash_lookup(&trans, bch2_xattr_hash_desc, &hash,
+                               inode->v.i_ino,
                                &X_SEARCH(type, name, strlen(name)),
                                0);
        if (IS_ERR(iter)) {
@@ -239,7 +240,7 @@ static int bch2_xattr_emit(struct dentry *dentry,
 }
 
 static int bch2_xattr_list_bcachefs(struct bch_fs *c,
-                                   struct bch_inode_info *inode,
+                                   struct bch_inode_unpacked *inode,
                                    struct xattr_buf *buf,
                                    bool all)
 {
@@ -249,12 +250,12 @@ static int bch2_xattr_list_bcachefs(struct bch_fs *c,
        u64 v;
 
        for (id = 0; id < Inode_opt_nr; id++) {
-               v = bch2_inode_opt_get(&inode->ei_inode, id);
+               v = bch2_inode_opt_get(inode, id);
                if (!v)
                        continue;
 
                if (!all &&
-                   !(inode->ei_inode.bi_fields_set & (1 << id)))
+                   !(inode->bi_fields_set & (1 << id)))
                        continue;
 
                ret = __bch2_xattr_emit(prefix, bch2_inode_opts[id],
@@ -298,11 +299,11 @@ ssize_t bch2_xattr_list(struct dentry *dentry, char *buffer, size_t buffer_size)
        if (ret)
                return ret;
 
-       ret = bch2_xattr_list_bcachefs(c, inode, &buf, false);
+       ret = bch2_xattr_list_bcachefs(c, &inode->ei_inode, &buf, false);
        if (ret)
                return ret;
 
-       ret = bch2_xattr_list_bcachefs(c, inode, &buf, true);
+       ret = bch2_xattr_list_bcachefs(c, &inode->ei_inode, &buf, true);
        if (ret)
                return ret;
 
@@ -327,10 +328,10 @@ static int bch2_xattr_set_handler(const struct xattr_handler *handler,
 {
        struct bch_inode_info *inode = to_bch_ei(vinode);
        struct bch_fs *c = inode->v.i_sb->s_fs_info;
+       struct bch_hash_info hash = bch2_hash_info_init(c, &inode->ei_inode);
 
        return bch2_trans_do(c, NULL, &inode->ei_journal_seq, 0,
-                       bch2_xattr_set(&trans, inode->v.i_ino,
-                                      &inode->ei_str_hash,
+                       bch2_xattr_set(&trans, inode->v.i_ino, &hash,
                                       name, value, size,
                                       handler->flags, flags));
 }