mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-12-11 00:00:12 +03:00
Update bcachefs sources to fd6fb298aa bcachefs: Make sure hash info gets initialized in fsck
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
fbe4e11c26
commit
693e278c14
@ -1 +1 @@
|
|||||||
2115a2ffde28a51adbb8a62fd3c1a3e4dd1b6160
|
fd6fb298aa869dc009e525baa9be67ad52588361
|
||||||
|
|||||||
@ -1748,7 +1748,7 @@ static void btree_node_write_work(struct work_struct *work)
|
|||||||
struct bch_fs *c = wbio->wbio.c;
|
struct bch_fs *c = wbio->wbio.c;
|
||||||
struct btree *b = wbio->wbio.bio.bi_private;
|
struct btree *b = wbio->wbio.bio.bi_private;
|
||||||
struct bch_extent_ptr *ptr;
|
struct bch_extent_ptr *ptr;
|
||||||
int ret;
|
int ret = 0;
|
||||||
|
|
||||||
btree_bounce_free(c,
|
btree_bounce_free(c,
|
||||||
wbio->data_bytes,
|
wbio->data_bytes,
|
||||||
|
|||||||
@ -158,6 +158,11 @@ int bch2_fsck_err(struct bch_fs *c, unsigned flags, const char *fmt, ...)
|
|||||||
mutex_lock(&c->fsck_error_lock);
|
mutex_lock(&c->fsck_error_lock);
|
||||||
s = fsck_err_get(c, fmt);
|
s = fsck_err_get(c, fmt);
|
||||||
if (s) {
|
if (s) {
|
||||||
|
/*
|
||||||
|
* We may be called multiple times for the same error on
|
||||||
|
* transaction restart - this memoizes instead of asking the user
|
||||||
|
* multiple times for the same error:
|
||||||
|
*/
|
||||||
if (s->last_msg && !strcmp(buf.buf, s->last_msg)) {
|
if (s->last_msg && !strcmp(buf.buf, s->last_msg)) {
|
||||||
ret = s->ret;
|
ret = s->ret;
|
||||||
mutex_unlock(&c->fsck_error_lock);
|
mutex_unlock(&c->fsck_error_lock);
|
||||||
|
|||||||
@ -673,10 +673,8 @@ static int __walk_inode(struct btree_trans *trans,
|
|||||||
|
|
||||||
pos.snapshot = bch2_snapshot_equiv(c, pos.snapshot);
|
pos.snapshot = bch2_snapshot_equiv(c, pos.snapshot);
|
||||||
|
|
||||||
if (pos.inode == w->cur_inum) {
|
if (pos.inode == w->cur_inum)
|
||||||
w->first_this_inode = false;
|
|
||||||
goto lookup_snapshot;
|
goto lookup_snapshot;
|
||||||
}
|
|
||||||
|
|
||||||
w->inodes.nr = 0;
|
w->inodes.nr = 0;
|
||||||
|
|
||||||
@ -862,10 +860,10 @@ bad_hash:
|
|||||||
(printbuf_reset(&buf),
|
(printbuf_reset(&buf),
|
||||||
bch2_bkey_val_to_text(&buf, c, hash_k), buf.buf))) {
|
bch2_bkey_val_to_text(&buf, c, hash_k), buf.buf))) {
|
||||||
ret = hash_redo_key(trans, desc, hash_info, k_iter, hash_k);
|
ret = hash_redo_key(trans, desc, hash_info, k_iter, hash_k);
|
||||||
if (ret) {
|
if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
|
||||||
bch_err(c, "hash_redo_key err %s", bch2_err_str(ret));
|
bch_err(c, "hash_redo_key err %s", bch2_err_str(ret));
|
||||||
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
|
||||||
ret = -BCH_ERR_transaction_restart_nested;
|
ret = -BCH_ERR_transaction_restart_nested;
|
||||||
}
|
}
|
||||||
fsck_err:
|
fsck_err:
|
||||||
@ -1639,6 +1637,10 @@ static int check_dirent(struct btree_trans *trans, struct btree_iter *iter,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
|
if (dir->first_this_inode)
|
||||||
|
*hash_info = bch2_hash_info_init(c, &dir->inodes.data[0].inode);
|
||||||
|
dir->first_this_inode = false;
|
||||||
|
|
||||||
if (fsck_err_on(ret == INT_MAX, c,
|
if (fsck_err_on(ret == INT_MAX, c,
|
||||||
"dirent in nonexisting directory:\n%s",
|
"dirent in nonexisting directory:\n%s",
|
||||||
(printbuf_reset(&buf),
|
(printbuf_reset(&buf),
|
||||||
@ -1665,11 +1667,7 @@ static int check_dirent(struct btree_trans *trans, struct btree_iter *iter,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dir->first_this_inode)
|
ret = hash_check_key(trans, bch2_dirent_hash_desc, hash_info, iter, k);
|
||||||
*hash_info = bch2_hash_info_init(c, &dir->inodes.data[0].inode);
|
|
||||||
|
|
||||||
ret = hash_check_key(trans, bch2_dirent_hash_desc,
|
|
||||||
hash_info, iter, k);
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto err;
|
goto err;
|
||||||
if (ret) {
|
if (ret) {
|
||||||
@ -1822,6 +1820,10 @@ static int check_xattr(struct btree_trans *trans, struct btree_iter *iter,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
if (inode->first_this_inode)
|
||||||
|
*hash_info = bch2_hash_info_init(c, &inode->inodes.data[0].inode);
|
||||||
|
inode->first_this_inode = false;
|
||||||
|
|
||||||
if (fsck_err_on(ret == INT_MAX, c,
|
if (fsck_err_on(ret == INT_MAX, c,
|
||||||
"xattr for missing inode %llu",
|
"xattr for missing inode %llu",
|
||||||
k.k->p.inode))
|
k.k->p.inode))
|
||||||
@ -1832,9 +1834,6 @@ static int check_xattr(struct btree_trans *trans, struct btree_iter *iter,
|
|||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
if (inode->first_this_inode)
|
|
||||||
*hash_info = bch2_hash_info_init(c, &inode->inodes.data[0].inode);
|
|
||||||
|
|
||||||
ret = hash_check_key(trans, bch2_xattr_hash_desc, hash_info, iter, k);
|
ret = hash_check_key(trans, bch2_xattr_hash_desc, hash_info, iter, k);
|
||||||
fsck_err:
|
fsck_err:
|
||||||
if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
|
if (ret && !bch2_err_matches(ret, BCH_ERR_transaction_restart))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user