bcachefs: fix check_inode_deleted_list()
authorKent Overstreet <kent.overstreet@linux.dev>
Tue, 27 Feb 2024 12:38:50 +0000 (07:38 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 10 Mar 2024 19:17:00 +0000 (15:17 -0400)
check_inode_deleted_list() returns true if the inode is on the deleted
list; check_inode() was checking the return code incorrectly.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/fsck.c

index 6a76077..ac4e40a 100644 (file)
@@ -799,12 +799,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(struct btree_trans *trans,
@@ -876,7 +873,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;