bcachefs: Fix path where dirent -> subvol missing and we don't fix
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 9 Feb 2024 00:52:37 +0000 (19:52 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Thu, 14 Mar 2024 01:22:24 +0000 (21:22 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/fsck.c

index 0d405b960a7c4b112c21d412e550b0021679dfb7..27bf07000baa293e5b8bdb997af5bc8ea4e44bf6 100644 (file)
@@ -1765,10 +1765,14 @@ static int check_dirent_to_subvol(struct btree_trans *trans, struct btree_iter *
        if (ret && !bch2_err_matches(ret, ENOENT))
                return ret;
 
-       if (fsck_err_on(ret, c, dirent_to_missing_subvol,
-                       "dirent points to missing subvolume\n%s",
-                       (bch2_bkey_val_to_text(&buf, c, d.s_c), buf.buf)))
-               return __remove_dirent(trans, d.k->p);
+       if (ret) {
+               if (fsck_err(c, dirent_to_missing_subvol,
+                            "dirent points to missing subvolume\n%s",
+                            (bch2_bkey_val_to_text(&buf, c, d.s_c), buf.buf)))
+                       return __remove_dirent(trans, d.k->p);
+               ret = 0;
+               goto out;
+       }
 
        ret = lookup_inode(trans, target_inum,
                           &subvol_root, &target_snapshot);
@@ -1790,6 +1794,7 @@ static int check_dirent_to_subvol(struct btree_trans *trans, struct btree_iter *
                                  target_snapshot);
        if (ret)
                return ret;
+out:
 err:
 fsck_err:
        printbuf_exit(&buf);