]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/str_hash.h
Update bcachefs sources to e2b8120595 bcachefs: Use x-macros for more enums
[bcachefs-tools-debian] / libbcachefs / str_hash.h
index 19a0d6b2754fa07df32fe32cc4e3dc14bcff8f08..9f0bd44051991263b33e32eedff96aa07b0690db 100644 (file)
@@ -18,11 +18,11 @@ static inline enum bch_str_hash_type
 bch2_str_hash_opt_to_type(struct bch_fs *c, enum bch_str_hash_opts opt)
 {
        switch (opt) {
-       case BCH_STR_HASH_OPT_CRC32C:
+       case BCH_STR_HASH_OPT_crc32c:
                return BCH_STR_HASH_CRC32C;
-       case BCH_STR_HASH_OPT_CRC64:
+       case BCH_STR_HASH_OPT_crc64:
                return BCH_STR_HASH_CRC64;
-       case BCH_STR_HASH_OPT_SIPHASH:
+       case BCH_STR_HASH_OPT_siphash:
                return c->sb.features & (1ULL << BCH_FEATURE_new_siphash)
                        ? BCH_STR_HASH_SIPHASH
                        : BCH_STR_HASH_SIPHASH_OLD;
@@ -156,13 +156,14 @@ bch2_hash_lookup(struct btree_trans *trans,
                if (k.k->type == desc.key_type) {
                        if (!desc.cmp_key(k, key))
                                return iter;
-               } else if (k.k->type == KEY_TYPE_whiteout) {
+               } else if (k.k->type == KEY_TYPE_hash_whiteout) {
                        ;
                } else {
                        /* hole, not found */
                        break;
                }
        }
+       bch2_trans_iter_put(trans, iter);
 
        return ERR_PTR(ret ?: -ENOENT);
 }
@@ -187,6 +188,9 @@ bch2_hash_hole(struct btree_trans *trans,
                        return iter;
        }
 
+       iter->flags |= BTREE_ITER_KEEP_UNTIL_COMMIT;
+       bch2_trans_iter_put(trans, iter);
+
        return ERR_PTR(ret ?: -ENOSPC);
 }
 
@@ -201,14 +205,12 @@ int bch2_hash_needs_whiteout(struct btree_trans *trans,
        int ret;
 
        iter = bch2_trans_copy_iter(trans, start);
-       if (IS_ERR(iter))
-               return PTR_ERR(iter);
 
        bch2_btree_iter_next_slot(iter);
 
        for_each_btree_key_continue(iter, BTREE_ITER_SLOTS, k, ret) {
                if (k.k->type != desc.key_type &&
-                   k.k->type != KEY_TYPE_whiteout)
+                   k.k->type != KEY_TYPE_hash_whiteout)
                        break;
 
                if (k.k->type == desc.key_type &&
@@ -249,13 +251,10 @@ int bch2_hash_set(struct btree_trans *trans,
                }
 
                if (!slot &&
-                   !(flags & BCH_HASH_SET_MUST_REPLACE)) {
+                   !(flags & BCH_HASH_SET_MUST_REPLACE))
                        slot = bch2_trans_copy_iter(trans, iter);
-                       if (IS_ERR(slot))
-                               return PTR_ERR(slot);
-               }
 
-               if (k.k->type != KEY_TYPE_whiteout)
+               if (k.k->type != KEY_TYPE_hash_whiteout)
                        goto not_found;
        }
 
@@ -304,7 +303,7 @@ int bch2_hash_delete_at(struct btree_trans *trans,
 
        bkey_init(&delete->k);
        delete->k.p = iter->pos;
-       delete->k.type = ret ? KEY_TYPE_whiteout : KEY_TYPE_deleted;
+       delete->k.type = ret ? KEY_TYPE_hash_whiteout : KEY_TYPE_deleted;
 
        bch2_trans_update(trans, iter, delete, 0);
        return 0;