summaryrefslogtreecommitdiff
path: root/fs/bcachefs/str_hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/bcachefs/str_hash.c')
-rw-r--r--fs/bcachefs/str_hash.c35
1 files changed, 16 insertions, 19 deletions
diff --git a/fs/bcachefs/str_hash.c b/fs/bcachefs/str_hash.c
index dfe4b6ae0733..ce2a54902a64 100644
--- a/fs/bcachefs/str_hash.c
+++ b/fs/bcachefs/str_hash.c
@@ -18,16 +18,14 @@ static int bch2_dirent_has_target(struct btree_trans *trans, struct bkey_s_c_dir
return ret;
return !ret;
} else {
- struct btree_iter iter;
- struct bkey_s_c k = bch2_bkey_get_iter(trans, &iter, BTREE_ID_inodes,
+ CLASS(btree_iter, iter)(trans, BTREE_ID_inodes,
SPOS(0, le64_to_cpu(d.v->d_inum), d.k->p.snapshot), 0);
+ struct bkey_s_c k = bch2_btree_iter_peek_slot(&iter);
int ret = bkey_err(k);
if (ret)
return ret;
- ret = bkey_is_inode(k.k);
- bch2_trans_iter_exit(trans, &iter);
- return ret;
+ return bkey_is_inode(k.k);
}
}
@@ -123,7 +121,6 @@ int bch2_repair_inode_hash_info(struct btree_trans *trans,
struct bch_inode_unpacked *snapshot_root)
{
struct bch_fs *c = trans->c;
- struct btree_iter iter;
struct bkey_s_c k;
CLASS(printbuf, buf)();
bool need_commit = false;
@@ -180,7 +177,7 @@ int bch2_repair_inode_hash_info(struct btree_trans *trans,
}
if (ret)
- goto err;
+ return ret;
if (!need_commit) {
printbuf_reset(&buf);
@@ -198,15 +195,12 @@ int bch2_repair_inode_hash_info(struct btree_trans *trans,
prt_printf(&buf, " %llx %llx", hash_info->siphash_key.k0, hash_info->siphash_key.k1);
#endif
bch2_print_str(c, KERN_ERR, buf.buf);
- ret = bch_err_throw(c, fsck_repair_unimplemented);
- goto err;
+ return bch_err_throw(c, fsck_repair_unimplemented);
}
ret = bch2_trans_commit(trans, NULL, NULL, BCH_TRANS_COMMIT_no_enospc) ?:
bch_err_throw(c, transaction_restart_nested);
-err:
fsck_err:
- bch2_trans_iter_exit(trans, &iter);
return ret;
}
@@ -328,8 +322,7 @@ duplicate_entries:
}
out:
fsck_err:
- bch2_trans_iter_exit(trans, dup_iter);
- printbuf_exit(&buf);
+ bch2_trans_iter_exit(dup_iter);
if (free_snapshots_seen)
darray_exit(&s->ids);
return ret;
@@ -352,10 +345,14 @@ int __bch2_str_hash_check_key(struct btree_trans *trans,
if (hash_k.k->p.offset < hash)
goto bad_hash;
- for_each_btree_key_norestart(trans, iter, desc->btree_id,
- SPOS(hash_k.k->p.inode, hash, hash_k.k->p.snapshot),
- BTREE_ITER_slots|
- BTREE_ITER_with_updates, k, ret) {
+ bch2_trans_iter_init(trans, &iter, desc->btree_id,
+ SPOS(hash_k.k->p.inode, hash, hash_k.k->p.snapshot),
+ BTREE_ITER_slots|
+ BTREE_ITER_with_updates);
+
+ for_each_btree_key_continue_norestart(iter,
+ BTREE_ITER_slots|
+ BTREE_ITER_with_updates, k, ret) {
if (bkey_eq(k.k->p, hash_k.k->p))
break;
@@ -372,11 +369,11 @@ int __bch2_str_hash_check_key(struct btree_trans *trans,
if (bkey_deleted(k.k))
goto bad_hash;
}
- bch2_trans_iter_exit(trans, &iter);
+ bch2_trans_iter_exit(&iter);
fsck_err:
return ret;
bad_hash:
- bch2_trans_iter_exit(trans, &iter);
+ bch2_trans_iter_exit(&iter);
/*
* Before doing any repair, check hash_info itself:
*/