diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2024-02-27 07:38:50 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2024-02-27 17:07:56 -0500 |
commit | 814433227606c6e8da39508897449fec1ed82049 (patch) | |
tree | a298d129592695f6ad5227cc083bdc1fc4cd1995 | |
parent | a1dc77fc2cfb0dc1248a406fa5ed0a8ee056a90b (diff) |
bcachefs: fix check_inode_deleted_list()
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | fs/bcachefs/fsck.c | 9 | ||||
-rw-r--r-- | fs/bcachefs/inode.c | 10 |
2 files changed, 8 insertions, 11 deletions
diff --git a/fs/bcachefs/fsck.c b/fs/bcachefs/fsck.c index 144f074bbc6c..8fd6b63c8fc2 100644 --- a/fs/bcachefs/fsck.c +++ b/fs/bcachefs/fsck.c @@ -849,12 +849,9 @@ static int check_inode_deleted_list(struct btree_trans *trans, struct bpos p) { struct btree_iter iter; struct bkey_s_c k = bch2_bkey_get_iter(trans, &iter, BTREE_ID_deleted_inodes, p, 0); - int ret = bkey_err(k); - if (ret) - return ret; - + int ret = bkey_err(k) ?: k.k->type == KEY_TYPE_set; bch2_trans_iter_exit(trans, &iter); - return k.k->type == KEY_TYPE_set; + return ret; } static int check_inode_dirent_inode(struct btree_trans *trans, struct bkey_s_c inode_k, @@ -970,7 +967,7 @@ static int check_inode(struct btree_trans *trans, if (ret < 0) return ret; - fsck_err_on(ret, c, unlinked_inode_not_on_deleted_list, + fsck_err_on(!ret, c, unlinked_inode_not_on_deleted_list, "inode %llu:%u unlinked, but not on deleted list", u.bi_inum, k.k->p.snapshot); ret = 0; diff --git a/fs/bcachefs/inode.c b/fs/bcachefs/inode.c index a3139bb66f77..84f67ae57232 100644 --- a/fs/bcachefs/inode.c +++ b/fs/bcachefs/inode.c @@ -1181,6 +1181,10 @@ int bch2_delete_dead_inodes(struct bch_fs *c) bool need_another_pass; int ret; again: + ret = bch2_btree_write_buffer_flush_sync(trans); + if (ret) + goto err; + need_another_pass = false; /* @@ -1213,12 +1217,8 @@ again: ret; })); - if (!ret && need_another_pass) { - ret = bch2_btree_write_buffer_flush_sync(trans); - if (ret) - goto err; + if (!ret && need_another_pass) goto again; - } err: bch2_trans_put(trans); return ret; |